繁体   English   中英

JavaScript正则表达式不匹配

[英]JavaScript regexp not matching

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

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

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

编辑:在某些情况下,字符串不会以右括号结尾。

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

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

RegExp.lastMatch给出最后一个正则表达式的匹配项。 它不是文本中的最后一个匹配项。

正则表达式从左到右解析并且很贪婪。 因此,您的正则表达式会匹配第一个'[',它会看到并抓住其中的单词。 当您调用lastMatch时,它将为您提供最后一个匹配的模式。 您需要首先匹配所有可能的。*,然后匹配您的模式。

使用match()代替test()


if (text.match(pattern))

test()检查字符串中是否匹配。 第一次出现后此操作成功完成,因此无需进一步解析。

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

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

克里基特

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM