[英]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.