使用regexp只获取一个匹配项
Get only one match with regexp
在下面的函数中,我遍历一个包含个字符串的数组(偶发事件)。字符串描述的是从另一个网络应用程序中删除的事件(犯罪或事故),我所做的是划分和计算不同的犯罪/事故,并将它们放在一个对象中(incident_MATCHES)。
然而,一些文本字符串可能包含我搜索的几个关键词(例如"炮火"answers"电池"),但我不想要。相反,我只想计算第一个找到的单词,如果找到更多的关键词,就应该忽略它们。
这是怎么做到的?
var INCIDENT_MATCHES = {
battery: /'w*(bråk)'w*|överfall|slagsmål|slogs|misshandel|misshandlad|'w*(tjuv)'w*/ig,
burglaries: /snattade|snattare|snatta|inbrott|bestulen|stöld|'w*(tjuv)'w*/ig,
robberies: /'w*(rån)'w*|personrån|'w*(ryckning)'w*|väskryckt*/ig,
gunfire: /skottlossning|skjuten|sköt/ig,
drugs: /narkotikabrott/ig,
vandalism: /skadegörelse|klotter|'w*(klottra)'w*/ig,
trafficAccidents: /(trafik|bil)olycka|(trafik|bil)olyckor|'w*(personbil)'w*|singelolycka|kollision|'w*(kollidera)'w*|påkörd|trafik|smitningsolycka/ig,
};
var j = 0,
incidentCounts = {},
incidentTypes = Object.keys(INCIDENT_MATCHES);
incidents.forEach(function(incident) {
matchFound = false;
incidentTypes.forEach(function(type) {
if(typeof incidentCounts[type] === 'undefined') {
incidentCounts[type] = 0;
}
var matchFound = incident.match(INCIDENT_MATCHES[type]);
if(matchFound){
matchFound = true;
incidentCounts[type] += 1;
}
});
j++;
});
您可以从"each"处理程序返回false
以停止迭代。
if(matchFound){
matchFound = true;
incidentCounts[type] += 1;
return false;
}
编辑—你会想要(我想)另一个测试,在外循环的末尾:
j++; // I don't understand what that does ...
if (matchFound) return false;
我在下面找到了这个解决方案。我所做的是:
- 我将第二个forEach语句替换为"every"
- 将"return false"放在"if(matchFound)"内
- 添加了"else{return true;}",以便在未找到匹配项的情况下继续循环
代码:
incidents[2].forEach(function(incident) {
matchFound = false;
incidentTypes.every(function(type) {
if(typeof crimesPerType[type] === 'undefined') {
crimesPerType[type] = 0;
}
var matchFound = incident.match(INCIDENT_MATCHES[type]);
if(matchFound){
crimesPerType[type] += 1;
if (type == 'trafficAccidents') {
incidents[3][j].push('traffic');
}
else {
incidents[3][j].push('crime');
}
return false;
}
else {
return true;
}
});
相关文章:
- Javascript Regexp :如果一个字母与一个数字相邻,请添加下划线
- Regexp:为一个带星号的组查找多个匹配项
- 用JavaScript RegExp匹配一个完整的单词
- regexp(?) 用于从另一个 URL 中提取 URL
- JavaScript RegExp 用于可选包装器,只有一个记住的部分
- Regexp只有一个点和数字
- 我需要一个RegExp,它只接受文本框中的斜杠
- JavaScript RegExp方法exec()只返回一个项
- Javascript RegExp 在 / 之后获取第二个也是最后一个字符串
- Regexp检查字符串是否至少包含一个''
- 在regexp中提取完整匹配和最后一个标记匹配
- 如何匹配一个url在javascript与regexp
- RegExp只允许单词之间有一个空格
- 调试一个Javascript RegExp正则表达式:验证挂在Amazon URL上
- 使用regexp添加一个特定单词的span类
- Regexp用于检查输入是否仅为整数(int),以及检查另一个输入是否仅为带有2位小数的数字
- RegExp用于删除第一个和最后一个字符,并将结束双斜杠转换为单个
- RegExp用于过滤最后一个点之后的字符
- 如何使一个regexp在js分裂打破使用特殊的文本字符
- 需要一个RegExp来查找没有被加号包围的字符