簡體   English   中英

為什么字符類和捕獲組在javascript正則表達式中對於空格字符后跟點會顯示不同的結果?

[英]Why character class and capturing group show different results in javascript regexp for a whitespace character followed by a dot?

我正在解決本書中的章節練習-http://eloquentjavascript.net/09_regexp.html

有一個問題,我需要為空格字符編寫正則表達式,后跟點,逗號,冒號或分號。

我寫了這個

var re1 = /\s(.|,|:|;)/;

這本書有答案

var re2 = /\s[.,;:]/;

我知道第二個是正確的,而且效率更高。 但是不考慮效率,第一個也應該給出正確的結果。

對於下面的代碼,第一個沒有給出正確的輸出-

console.log(re1.test("escape the dot"));  // prints true

它應該給出“ false”,但輸出相反。 我聽不懂 我也嘗試過https://www.debuggex.com/ ,但這個數字似乎還可以!

看來我末日缺少一些了解。

當我完成要發布的問題時,我意識到我的錯誤給了我錯誤的輸出。 因此,我認為我寧願在這里分享問題和答案,以幫助將來可能會遇到類似問題的任何人。

問題是句點(點)本身在方括號之間使用時會失去其特殊含義。 其他特殊字符(例如+)也是如此。

但是在捕獲組中使用時,它們保留了其特殊含義。

所以,代碼

var re1 = /\s(.|,|:|;)/;
console.log(re1.test("escape the dot"));  // prints true

而是在尋找模式-一個空格,后跟一個不是換行符的字符(由於period),或者逗號,冒號和分號中的任何一個。

為了獲得正確的輸出,如果與捕獲組一起使用,則正確的re將是:

var re1 = /\s(\.|,|:|;)/;

暫無
暫無

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

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