是否有任何Javascript函数从指定的索引中进行正则表达式匹配
Is there any Javascript function which does regex match from specified index
是否有如下功能:
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);
我认为没有任何正则表达式方法可以做到这一点。如果你担心性能,我只会存储完整的字符串和剪切的字符串,这样substring
只调用一次:
var regex=/'s*('w+)/;
var s="abc def ";
var shorts = s.substring(3);
var m1=regex.exec(s); // -> matches "abc"
var m2=regex.exec(shorts); // -> matches " def"
相关文章:
- java.net和javascript之间正则表达式的差异
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- 正则表达式在字符串中找到base64
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 调用正则表达式匹配的函数
- 使用正则表达式评估电子邮件地址时出现性能问题
- Javascript 正则表达式 : ^[^/s/]+[a-z]{1,}[0-9]*[-_]*[^/][
- JavaScript正则表达式文本与RegExp对象
- 是否有任何Javascript函数从指定的索引中进行正则表达式匹配
- 如果关联数组从正则表达式返回,则对索引进行排序
- 将正则表达式保存的值作为数组索引传递
- JavaScript正则表达式匹配将输入作为前两个索引返回
- 将每个事件与正则表达式匹配,并在字符串中获取它们的索引
- 获取正则表达式中匹配字符串的索引
- 如何在JavaScript正则表达式中获得捕获组的索引
- 使用正则表达式将字符串替换为数组索引和数组元素.Jquery
- 获取正则表达式中匹配的组的索引
- 在字符串中查找所有匹配的正则表达式模式和匹配的索引
- 在JavaScript正则表达式匹配中移动索引