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