[英]What is meaning of [_|\_|\.]? in 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.