如何在 JavaScript 中获取正则表达式匹配的开始和结束位置?

Posted

技术标签:

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

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

【问题讨论】:

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

【讨论】:

以上是关于如何在 JavaScript 中获取正则表达式匹配的开始和结束位置?的主要内容,如果未能解决你的问题,请参考以下文章

[javascript] 获取正则子表达式里的内容

day17-JavaScript正则表达式

如何在 JavaScript 字符串替换中否定匹配正则表达式? [复制]

javascript - 将字符串与正则表达式数组匹配

javascript正则表达式中 (?=exp)(?<=exp)(?!exp)

java正则表达式如何获取字符串中所有匹配内容