有没有办法在 Javascript 中检索正则表达式 match() 结果字符串中的(起始)字符位置?
返回 Javascript 中正则表达式 match() 的位置?
IT技术
javascript
regex
match
string-matching
2021-01-21 22:25:05
6个回答
exec
返回一个具有index
属性的对象:
var match = /bar/.exec("foobar");
if (match) {
console.log("match found at " + match.index);
}
对于多个匹配项:
var re = /bar/g,
str = "foobarfoobar";
while ((match = re.exec(str)) != null) {
console.log("match found at " + match.index);
}
这是我想出的:
// Finds starting and ending positions of quoted text
// in double or single quotes with escape char support like \" \'
var str = "this is a \"quoted\" string as you can 'read'";
var patt = /'((?:\\.|[^'])*)'|"((?:\\.|[^"])*)"/igm;
while (match = patt.exec(str)) {
console.log(match.index + ' ' + patt.lastIndex);
}
来自developer.mozilla.org文档关于 String.match()
方法:
返回的 Array 有一个额外的输入属性,它包含被解析的原始字符串。此外,它还有一个 index 属性,表示 string 中匹配项的从零开始的索引。
在处理非全局正则表达式时(即,g
正则表达式上没有标志),返回的值.match()
有一个index
属性……您所要做的就是访问它。
var index = str.match(/regex/).index;
这是一个示例,显示它也能正常工作:
var str = 'my string here';
var index = str.match(/here/).index;
console.log(index); // <- 10
我已经成功地测试了这一点,一直回到 IE5。
在现代浏览器中,您可以使用string.matchAll()完成此操作。
这种方法 vs 的好处RegExp.exec()
是它不依赖于有状态的正则表达式,如@Gumbo's answer。
let regexp = /bar/g;
let str = 'foobarfoobar';
let matches = [...str.matchAll(regexp)];
matches.forEach((match) => {
console.log("match found at " + match.index);
});
您可以使用对象的search
方法String
。这仅适用于第一场比赛,否则将按照您的描述进行。例如:
"How are you?".search(/are/);
// 4