[英]Regular Expression form {m,n} does not use upper limit
我的理解是正则表达式形式a{m,n}
最多匹配a
次。 但是,以下代码段无法正常运行(这是javascript):
/\{{2,2}/.exec ('df{{{df')
// [ '{{', index: 2, input: 'df{{{df' ]
它不应该返回null吗?
它与文本匹配,因为有两个。 满足您的正则表达式指定的要求。 如果要防止其他项匹配,请使用负前瞻: (?!\\{)
。
(?:^|[^{])(\{{2,2}(?!\{))
然后,使用第一个捕获的组。
顺便说一下,在这种情况下, {2,2}
,2
是可选的,因为它是相同的数字。
编辑:添加了用法示例以摆脱第一个匹配的字符。 (JavaScript不支持负向后看。
var myRegexp = /(?:^|[^{])(\{{2,2}(?!\{))/g;
var match = myRegexp.exec(myString);
alert(match[1]);
表达式指出的内容是在字符串中的任意位置找到{{
,它将找到它。 如果您只想查找{{
而不是{{{
则需要指定要查找的内容:
/[^{]\{{2,2}[^{]/
用英语:
[不是{
任何字符,然后是[正好2 {
],然后是[不是{
任何字符,
这将匹配a{{b
但不是a{b
而不是a{{{{b
之所以匹配,是因为它包含一个带有恰好两个左花括号的子字符串。 如果您希望它不匹配,则必须指定要查找的2个左括号以外的任何内容都不能为左括号。
该正则表达式恰好寻找两个左大括号( {{
),它在索引2的字符串“ df{{{df
”中找到(紧接在第一个“ df”之后)。 在我看来不错。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.