談談regex (?:) (?=) (?!) (?<=) (?
一、簡介(?:pattern)、(?=pattern)、 (?!pattern)、 (?<=pattern)、 (?<!pattern)

這是我做的一張思維導圖,說一個容易被忽視的地方,就是零寬斷言會匹配出任何滿足pattern的位置,而不是像捕獲組一樣下次匹配是在上次匹配記錄之後開始的。
例如:

二、快速理解零寬斷言
舉個栗子,有以下文本:
1 我要吃好吃的 我要下班 我要睡覺 2 我不要吃好吃的 我要下班 我要睡覺 3 我要吃好吃的 我要下班 我不要睡覺 偽程式碼: positive_lookahead_regex = 我要下班(?=我要睡覺) //這裡的含義為 匹配"我要下班"這個模式的同時滿足"我要睡覺"這個模式。 negative_lookahead_regex = 我要下班(?!我要睡覺) // 這裡的含義為 匹配"我要下班"這個模式的同時滿足 不是"我要睡覺"這個模式。 positive_lookbehind_regex = (?<=我要吃好吃的)我要下班 negative_lookbehind_regex = (?<!我要吃好吃的)我要下班
快速記憶方法:
1、首先(? 開頭 表示非捕獲組
2、然後如果是負向的斷言 則會跟 “<“
3、最後 肯定 是”=”,否定是”!”
Q: 正向 肯定 預查 equals (?=pattern)
負向 否定 預查 equals (?<!pattern)
四、實踐中不斷理解
str1 = "123456789 12384" pattern = "\B(?=(?:\d{3})+(?!\d))" Q:如果用這個模式去 匹配str1,並且對匹配到的位置進行替換成"," 最終結果會是什麼,這個過程是怎樣的?
最好自己有答案,在看結果哦~

str1 = "123456789 12384" pattern = "/\B(?=(?:\d{3})+(?!\d))/g" str1.replace(pattern,',') // "123,456,789 12,384"
View Code


