我的理解是,正则表达式a{m,n}
最多匹配a
n次。但是,以下代码段无法正常工作(这是javascript):
/\{{2,2}/.exec ('df{{{df')
// [ '{{', index: 2, input: 'df{{{df' ]
它不应该返回null吗?
答案 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”之后)。看起来对我来说。