JavaScript:无法操作使用string.match生成的数组

时间:2014-06-26 20:51:30

标签: javascript arrays match splice

我使用以下方法制作了一个数组:

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生成的数组是什么?任何帮助将不胜感激。

1 个答案:

答案 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");

<强>参考