如何在 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 字符串替换中否定匹配正则表达式? [复制]