[英]RegEx: Using /i vs. /g (/g replaces whitespace but /i doesn't)
我想要一個只包含字母的數組(我正在編寫一個函數來檢查pangrams)。 使用/g
代碼給我一個只有字母和沒有空格的數組( lettersArr.length = 34
):
var s = "The quick brown fox jumps over the lazy dog."
var lettersArr = s.replace(/[^a-z]+/i, "").split("");
console.log(lettersArr);
但是,使用與/i
相同的代碼給出了一個包含字母的數組以及快速和棕色之間的空格( lettersArr.length = 43
)。 既然/i
只是不區分大小寫,那么它們不應該給出相同的結果嗎? 這只是一個RegEx或Javascript錯誤嗎?
你沒有將g
標志添加到正則表達式,所以它只替換第一個匹配,在你的情況下是第一個空格字符。
如果你添加g
標志,它的工作原理是:
var s = "The quick brown fox jumps over the lazy dog."
var lettersArr = s.replace(/[^a-z]+/gi, "").split("");
console.log(lettersArr);
使用g
標志意味着.replace
不會在第一場比賽時停止。
請注意,如果沒有i
,陣列的長度應為35,而使用i
34,所以我不確定你是如何獲得26或28的。
/[^az]+/i
匹配[空格] [。] 第一場比賽是[空間]
當你這樣做
s.replace(/[^a-z]+/i, "")
給'Thequick brown fox jumps over the lazy dog.'
length = 43
/[^az]+/g
[T] [space] [。] 匹配全球
這里缺少Capital T.
給出"hequickbrownfoxjumpsoverthelazydog"
length = 34
所以你需要使用兩個標志,因為你也想匹配大寫字母T.
/[^az]+/gi
[space] [。] 匹配全局不區分大小寫
s.replace(/[^az]+/gi, "")
提供所需的字符串
"Thequickbrownfoxjumpsoverthelazydog"
length = 35
之后你可以拆分它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.