簡體   English   中英

Javascript regexps中[^]的含義是什么?

[英]What is meaning of [^] in Javascript regexps?

[^a]表示除了a之外a任何字符,我們知道,但[^] (沒有后續字符)是什么意思? 就像-[-]這樣的情況下失去其字符范圍的含義一樣,我認為[^]會匹配插入符號。 我花了太長時間來調試這個問題,但卻發現至少在Chrome 19中看起來它似乎匹配任何東西 - 換句話說,相當於. 這里是否有適用的規范或預期的行為是什么?

是的,我知道我可以並且可能應該使用[\\^] 這個問題更多的是病態的好奇心。

根據JavaScript規范(ES3和ES5), [^]匹配任何單個代碼單元,與[\\s\\S][\\0-\￿](.|\\s) (不要使用;不像其他人,它依賴於回溯),等等. 是點與四個換行代碼點( \\r\\n\
\
 )不匹配。

我不建議使用[^][] ,因為它們不能一致地跨瀏覽器工作,並且它們阻止您的正則表達式使用其他編程語言。 IE <= 8且舊版本的Safari對空字符類使用傳統(非JavaScript)正則表達式行為。 較舊版本的Opera反轉了正確的JavaScript行為,因此[]匹配任何代碼單元, [^]永遠不會匹配。 傳統的正則表達式的行為是領先的,轉義]字符類中被視為文字字符,不結束字符類。

如果您使用XRegExp庫, [][^]可以正確且一致地跨瀏覽器工作。 XRegExp還添加了s (aka dotall或singleline)標志,使得點匹配任何代碼單元(與正確遵循JavaScript規范的瀏覽器中的[^]相同)。

插入符^具有許多含義 - 與正則表達式語法中的大多數字符一樣。 此外,所有角色都嚴重依賴於他們的背景。 為了進一步復雜化,一些字符和語法依賴於底層引擎(Perl,Java)。

讓我們分手[^]

[]是一個字符類。

[^是:

否定字符類,匹配字符類中未列出的字符。

沒有在字符類中定義任何字符。 所以行為是不確定的 意思是沒有什么可以否定,因此它匹配任何東西

意思是否定以下內容。 因此,這里沒有任何內容:

什么都沒有什么=一切

但是,大多數其他RegEx引擎在表達式中拋出錯誤:

  • ereg(): REG_EBRACK
  • preg_match(): Compilation failed: missing terminating ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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