【问题标题】:How to get both the start and end positions of regex matches in JavaScript?如何在 JavaScript 中获取正则表达式匹配的开始和结束位置?
【发布时间】:2011-11-06 09:44:14
【问题描述】:

我只想找到我正在搜索的子字符串的开始和结束位置。 关于如何做到这一点的任何想法?

【问题讨论】:

  • 你试过什么?哪里失败了?您使用的是什么标记或 JavaScript?
  • 没有表明OP付出任何努力的问题真的让我很难过。
  • 我同意 Juan,尤其是 userNNNNNN 帐户似乎太常见了。
  • @JuanMendes 我们不应该批评人们提出这样一个有用的问题:答案对我来说也不明显,所以我很感激这个问题被发布。
  • @AndersonGreen 不管你喜不喜欢,一个不费吹灰之力的问题是一个糟糕的问题。如果你在工作中这样做,你将一事无成。要求展示你的尝试是建设性的批评。我不认为有人粗鲁。如果你问我,不努力就问问题是不礼貌的。

标签: javascript regex substring


【解决方案1】:

这是一个 jsfiddle,它显示了它是如何完成的......

https://jsfiddle.net/cz8vqgba/

var regex = /text/g;
var text = 'this is some text and then there is some more text';
var match;
while(match = regex.exec(text)){
    console.log('start index= ' +(regex.lastIndex - match[0].length));   
    console.log('end index= ' + (regex.lastIndex-1));
}

这将为您提供字符串中所有匹配项的开始和结束索引...

【讨论】:

    【解决方案2】:

    根本不需要遍历干草堆两次(这可能会降低效率)

    你可以做到:

    "foobarfoobar".match(/bar/);
    

    或:

    /bar/.exec("foobarfoobar");
    

    都返回这个对象:

    {
        0: 'bar'
        index: 3
        input: 'foobarfoobar'
    }
    

    因此,如果您想要开始和结束位置,您只需执行以下操作:

    var needle = /bar/;
    var haystack = 'foobarfoobar';
    
    var result = needle.exec(haystack);
    var start = result.index;
    var end = start + result[0].length - 1;
    

    注意这个简单的例子只给你第一个匹配;如果您期望有几场比赛,事情会变得有点复杂。

    此外,我在问题标题中回答了正则表达式,但如果您只需要字符串匹配,您可以使用 indexOf() 进行几乎相同的操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-06
      • 2012-04-14
      • 2014-09-15
      • 1970-01-01
      • 2022-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多