我正在尝试实现以下找到的正则表达式搜索Golfscript 语法页面 http://www.golfscript.com/golfscript/syntax.html.
var ptrn = /[a-zA-Z_][a-zA-Z0-9_]*|'(?:\\.|[^'])*'?|"(?:\\.|[^"])*"?|-?[0-9]+|#[^\n\r]*|./mg;
input = ptrn.exec(input);
输入只是正则表达式的第一个匹配项。例如:"hello" "world"
应该返回["hello", "world"]
但它只返回["hello"]
.
正则表达式执行程序 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec一次只能返回一个匹配结果。
为了检索多个匹配项,您需要运行exec
多次在表达式对象上。例如,使用一个简单的 while 循环:
var ptrn = /[a-zA-Z_][a-zA-Z0-9_]*|'(?:\\.|[^'])*'?|"(?:\\.|[^"])*"?|-?[0-9]+|#[^\n\r]*|./mg;
var match;
while ((match = ptrn.exec(input)) != null) {
console.log(match);
}
这会将所有匹配记录到控制台。
请注意,为了使其工作,您需要确保正则表达式具有g(全局)标志 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#Parameters。该标志确保在表达式上执行某些方法后,lastIndex财产 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex已更新,因此将开始进一步的通话after之前的结果。
还需要声明正则表达式outside循环(如上例所示)。否则,表达式对象将在每次迭代时重新创建,然后lastIndex
显然每次都会重置,导致无限循环。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)