matches "abc" var m2=-6ren">
gpt4 book ai didi

javascript - 是否有任何 Javascript 函数可以从指定索引进行正则表达式匹配

转载 作者:行者123 更新时间:2023-11-30 10:38:53 25 4
gpt4 key购买 nike

是否有以下功能:

var regex=/\s*(\w+)/;
var s="abc def ";
var m1=regex.exec(s,0); // -> matches "abc"
var m2=regex.exec(s,3); // -> matches "def"

我知道替代方案是:

var regex=/\s*(\w+)/;
var s="abc def ";
var m1=regex.exec(s); // -> matches "abc"
var m2=regex.exec(s.substring(3)); // -> matches " def"

但是我担心如果s很长,s.substring被多次调用,一些实现可能效率很低,会多次复制长字符串。

最佳答案

是的,如果正则表达式具有 g 全局修饰符,您可以使 exec 从特定索引开始。

var regex=/\s*(\w+)/g; // give it the "g" modifier

regex.lastIndex = 3; // set the .lastIndex property to the starting index

var s="abc def ";

var m2=regex.exec(s); // -> matches "def"

如果您的第一个代码示例具有 g 修饰符,那么它会像您编写的那样工作,原因与上述相同。使用 g,它会自动将 .lastIndex 设置为上次匹配结束后的索引,因此下一次调用将从那里开始。

所以这取决于你需要什么。

如果您不知道会有多少匹配项,常见的方法是在循环中运行 exec

var match,
regex = /\s*(\w+)/g,
s = "abc def ";

while(match = regex.exec(s)) {
alert(match);
}

或者作为 do-while

var match,
regex = /\s*(\w+)/g,
s = "abc def ";

do {
match = regex.exec(s);
if (match)
alert(match);
} while(match);

关于javascript - 是否有任何 Javascript 函数可以从指定索引进行正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12354171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com