正则表达式访问多个事件
这个问题在这里已经有了答案:
看到这个问题:
txt = "Local residents o1__have called g__in o22__with reports...";
var regex = /o([0-9]+)__/g
var matches = [];
var match = regex.exec(txt);
while (match != null) {
matches.push(match[1]);
match = regex.exec(txt);
}
alert(matches);
您需要在正则表达式对象上使用.exec()
,并使用g标志重复调用它以获取像这样的连续匹配:
var txt = "Local residents o1__have called g__in o22__with reports...";
var re = /o([0-9]+)__/g;
var matches;
while ((matches = re.exec(txt)) != null) {
alert(matches[1]);
}
来自上一次匹配的状态作为lastIndex
存储在正则表达式对象中,这就是下一个匹配使用的起点。
你可以看到它在这里工作:http://jsfiddle.net/jfriend00/UtF6J/
这里描述使用正则表达式:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp/exec。
/o([0-9]+?)__/g
这应该工作。 点击这里搜索“懒星”。
var rx = new RegExp( /o([0-9]+?)__/g );
var txt = "Local residents o1__have called g__in o22__with reports...";
var mtc = [];
while( (match = rx.exec( txt )) != null ) {
alert( match[1] );
mtc.push(match[1]);
}
Jek-fdrv在评论中指出,如果您在while循环之前调用rx.test,则会跳过一些结果。 这是因为RegExp对象包含一个lastIndex字段,用于跟踪字符串中最后匹配的索引。 当lastIndex更改时,RegExp通过从lastIndex值开始保持匹配,因此字符串的一部分被跳过。 一个小例子可能有所帮助:
var rx = new RegExp( /o([0-9]+?)__/g );
var txt = "Local residents o1__have called g__in o22__with reports...";
var mtc = [];
console.log(rx.test(txt), rx.lastIndex); //outputs "true 20"
console.log(rx.test(txt), rx.lastIndex); //outputs "true 43"
console.log(rx.test(txt), rx.lastIndex); //outputs "false 0" !!!
rx.lastIndex = 0; //manually reset lastIndex field works in Chrome
//now everything works fine
while( (match = rx.exec( txt )) != null ) {
console.log( match[1] );
mtc.push(match[1]);
}
链接地址: http://www.djcxy.com/p/76787.html
上一篇: Regex access multiple occurrences
下一篇: Regular expression to match numbers up to two decimal place