正则表达式形式{m,n}不使用上限

时间:2011-06-23 22:38:14

标签: javascript regex

我的理解是,正则表达式a{m,n}最多匹配a n次。但是,以下代码段无法正常工作(这是javascript):

/\{{2,2}/.exec ('df{{{df')
// [ '{{', index: 2, input: 'df{{{df' ]

它不应该返回null吗?

4 个答案:

答案 0 :(得分:5)

它与文本匹配,因为有两个。这满足了你的正则表达式指定的要求。如果您想阻止额外匹配使用否定前瞻:(?!\{)

(?:^|[^{])(\{{2,2}(?!\{))

然后,使用第一个捕获的组。

顺便说一下,编辑,2 {2,2}在这种情况下是可选的,因为它是相同的数字。

编辑:添加用法示例以摆脱第一个匹配的字符。 (Javascript不支持负面的后视。

var myRegexp = /(?:^|[^{])(\{{2,2}(?!\{))/g;
var match = myRegexp.exec(myString);
alert(match[1]);

答案 1 :(得分:3)

你的表达式声明在字符串中的任何地方找到{{,它会找到它。如果您只想查找{{而不是{{{,则需要指定您要查找的内容:

/[^{]\{{2,2}[^{]/

英文:

[任何字符不是{]后跟[正好2 {]后跟[任何字符不是{]

这将匹配a{{b但不匹配a{b而不是a{{{{b

答案 2 :(得分:1)

它匹配,因为它包含一个正好有2个左括号的子字符串。如果你想要它不匹配,你必须指定你正在寻找的2个左括号之外的任何东西都不能是左括号。

答案 3 :(得分:1)

正则表达式正在寻找两个左大括号({{),它在索引2的字符串“df{{{df”中找到(紧接在第一个“df”之后)。看起来对我来说。