JavaScript正则表达式不匹配

时间:2012-08-22 05:56:55

标签: javascript regex

我很难获得看似简单的正则表达式。我试图抓住字符串中方括号之间最后出现的单词字符。我的代码:

pattern = /\[(\w+)\]/g;
var text = "item[gemstones_attributes][0][shape]";
if (pattern.test(text)) {
    alert(RegExp.lastMatch);
}

当我希望输出“shape”时,上面的代码输出“gemstones_attributes”。为什么这个正则表达式不起作用,或者我的最后一场比赛方法有什么问题?我确信我犯了一个明显的错误 - 正则表达从来都不是我的字符串。

修改 在某些情况下,字符串不会以右括号终止。

4 个答案:

答案 0 :(得分:2)

您可以在模式之前尽可能地贪婪地匹配,这将导致您的组仅匹配最后一个匹配:

pattern = /.*\[(\w+)\]/g;
var text = "item[gemstones_attributes][0][shape]";
var match = pattern.exec(text);
if (match != null) alert(match[1]);

答案 1 :(得分:1)

RegExp.lastMatch给出最后一个正则表达式的匹配。这不是文中的最后一场比赛。

正则表达式从左向右解析并且贪婪。所以你的正则表达式匹配它看到的第一个'['并抓住它之间的单词。当你调用lastMatch时,它会为你提供最后匹配的模式。你需要的是匹配你可以先得到的一切。*然后你的模式。

答案 2 :(得分:0)

使用match()代替test()


if (text.match(pattern))

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

答案 3 :(得分:0)

我认为你的问题出在你的正则表达式而不是你的src行.lastMatch。

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

krikit