我使用以下方法制作了一个数组:
var arr = [];
arr = string.match(regex here);
数组由我需要过滤的单词组成,因此我尝试使用.splice删除同一单词的不需要的实例:
for (var i = arr.length - 1; i >= 0; i--) {
if (arr[i] === 'jim') {
arr.splice(i, 1);
}
}
for循环不识别数组中'jim'的任何实例,尽管有几个。
我使用我自己制作的数组尝试了循环,它工作正常,即:
arr = ['jim', 'bob', 'arthur', 'jim', 'fred']
我不理解string.match生成的数组是什么?任何帮助将不胜感激。
答案 0 :(得分:0)
使用RegExp中的|
元字符生成如下数组:
['jim', 'bob', 'arthur', 'jim', 'fred']
例如:
var arr = string.match(/jim|bob|arthur|fred/g);
可以使用RegExp /(\w+)(.*)+\1/,"$1$2"
删除重复项:
/*Replace a word with a dupe with the original plus whatever words come in between*/
var arr = String(string.match(/jim|bob|arthur|fred/g)).replace(/(\w+)(.*)+\1/,"$1$2");
/*Remove the hanging comma*/
arr = arr.replace(/,$/,"");
给出如下输入:
var string = "jim and bob and arthur and fred each have a brother named jim";
适用于有问题的问题。
如果RegExp不灵活,替换器功能也可以这样做:
function myReplacer(substring, offset, fullstring) {
var names = {'jim':"", 'bob':"", 'arthur':"", 'fred':""};
if (substring in names)
{
return substring;
}
}
var arr = string.replace(/\w+/g, myReplacer).replace("undefined","","g").replace(/\s+/g," ").replace(/(\w+)(.*)+\1/,"$1$2");
<强>参考强>