获取字符串中的匹配数组作为索引

时间:2016-04-26 16:34:31

标签: javascript string arraylist string-matching

示例:" abc abc ab a" .indexOfList(" abc")返回[0,4]

我的代码:

String.prototype.indexOfList=function(word){
    var l=[];
    for(var i=0;i<this.length;i++){ //For each character
        var pushed=(this[i]==word[0])&&(word.length+i<=this.length);
        if (pushed) {
            for(var j=1;j<word.length;j++){
                if (word[j]!=this[i+j]) {
                    pushed=false; break;
                }
            }
        }
        if (pushed) {
            l.push(i);
        }
    }
    return l;
}

是否有比这更好更小的方式?

5 个答案:

答案 0 :(得分:1)

您可以使用正则表达式match命令:

var re = /abc/g,
str = "abc abc ab a";

var pos = [];
while ((match = re.exec(str)) != null) {
    pos.push(match.index);
}

答案 1 :(得分:1)

有一个可以处理重叠字符串的版本,即字符aaa的格式aaaaa应该返回[0,1,2]

function indexOfList(needle, haystack) {
  const result = [];
  let i = 0;
  while (haystack.includes(needle, i)) {
    const match = haystack.indexOf(needle, i);
    result.push(match);
    i = match + 1;
  }
  return result;
}

indexOfList("abc", "abc abc ab a"), // [0, 4]
indexOfList("aaa", "aaaabc abc ab a") // [0, 1]

我还建议不要扩展原生对象的原型。它可能导致一个非常讨厌的名字冲突。

考虑你的同事(甚至语言维护者)添加一个同名的函数。

答案 2 :(得分:0)

无需复杂化。与此类似的方法已经存在:String.indexOf

您还可以将第二个参数传递给此方法,告诉它从哪里开始查找。如果继续增加第二个参数,则可以快速找到每个参数。

String.prototype.indexOfList = function(word) {
    var start = this.indexOf(word);
    var l = [start]

    if(start == -1) {
        return [-1, -1];
    }

    var index = start;
    for(var i = start + word.length; i < this.length - word.length; i = index) {
        index = this.indexOf(word, i);

        if(index == -1) {
            break;
        }

        l.push(index);
    }

    return l;
}

这将从第一次出现开始,并继续在单词出现的每个索引上添加。

答案 3 :(得分:0)

使用File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response 132. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\Python27\lib\site-packages\django\views\generic\base.py" in view 71. return self.dispatch(request, *args, **kwargs) File "C:\Python27\lib\site-packages\django\views\generic\base.py" in dispatch 89. return handler(request, *args, **kwargs) File "C:\Users\lenovo\Desktop\Grooved2\grooved\src\store\views.py" in get 560. data = ChartData.check_order_data() File "C:\Users\lenovo\Desktop\Grooved2\grooved\src\store\utils.py" in check_order_data 15. print datetime.datetime.strptime(order.order.timestamp, "%Y-%m-%d %H:%M:%S.%f") 功能

indexOf

答案 4 :(得分:0)

您可以使用replace

String.prototype.indexOfList = function(word){
    var l=[];
    this.replace(new RegExp(word,"g"), (a,i) => l.push(i));
    return l;
}

console.log("abc abc ab a".indexOfList("abc"));