JavaScript regexp not matching
我很难获得一个看似简单的regexp。我试图在一个字符串的方括号中抓取最后出现的单词字符。我的代码:
1 2 3 4 5 | pattern = /\[(\w+)\]/g; var text ="item[gemstones_attributes][0][shape]"; if (pattern.test(text)) { alert(RegExp.lastMatch); } |
上面的代码是输出"宝石属性",当我想它输出"形状"。为什么这个regexp不起作用,或者我获取最后一个匹配的方法有什么问题?我确信我犯了一个明显的错误——正则表达式从来都不是我的字符串。
编辑:在某些情况下,字符串不会以右括号结束。
您可以在模式之前贪婪地匹配,这将导致您的组只匹配最后一个匹配:
1 2 3 4 | pattern = /.*\[(\w+)\]/g; var text ="item[gemstones_attributes][0][shape]"; var match = pattern.exec(text); if (match != null) alert(match[1]); |
last match提供最后一个正则表达式的匹配项。这不是文本中的最后一个匹配项。
正则表达式从左到右解析,并且贪婪。所以您的regexp匹配第一个"[",它看到并抓住它之间的单词。当您调用lastmatch时,它会给出最后一个匹配的模式。你需要的是先匹配你能匹配的所有东西,然后再匹配你的模式。
我认为你的问题在于你的正则表达式,而不是你的src行.lastmatch。
regex只返回方括号的第一个匹配项,而不是所有匹配项。您可以尝试将一些组添加到正则表达式中——通常您应该获得所有匹配项。
克里特
用
1 | if (text.match(pattern)) |