关于正则表达式:JavaScript regexp不匹配

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只返回方括号的第一个匹配项,而不是所有匹配项。您可以尝试将一些组添加到正则表达式中——通常您应该获得所有匹配项。

克里特


match()代替test()

1
if (text.match(pattern))

test()检查字符串中是否匹配。这在第一次出现之后是成功的,因此不需要进一步分析。