簡體   English   中英

正則表達式格式{m,n}不使用上限

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM