Javascript 錨點 ^ $ 的多行模式,修飾符 "m"

2023-02-17 11:01 更新

多行模式由修飾符 ?m? 啟用。

它只影響 ^ 和 $ 的行為。

在多行模式下,它們不僅僅匹配文本的開始與末尾,還匹配每一行的開始與末尾。

搜索行的開頭 ^

在這個有多行文本的例子中,模式 /^\d/gm 將從每行的開頭取一個數(shù)字:

let str = `1st place: Winnie
2nd place: Piglet
3rd place: Eeyore`;

console.log( str.match(/^\d/gm) ); // 1, 2, 3

沒有修飾符 m 時,僅會匹配第一個數(shù)字:

let str = `1st place: Winnie
2nd place: Piglet
3rd place: Eeyore`;

console.log( str.match(/^\d/g) ); // 1

這是因為默認(rèn)情況下,錨點 ^ 僅匹配文本的開頭,在多行模式下,它匹配行的開頭。

請注意:

“行的開頭”表示“就在換行符之后”:多行模式下的測試 ^ 匹配所有以換行符 \n 開頭的位置。

以及在文本開始的位置。

搜索行的末尾 $

美元符 $ 的行為也類似。

正則表達(dá)式 \d$ 尋找每行的最后一個數(shù)字

let str = `Winnie: 1
Piglet: 2
Eeyore: 3`;

console.log( str.match(/\d$/gm) ); // 1,2,3

沒有修飾符 m,那么美元符 $ 將只會匹配整個文本的末尾,所以只有最后一個數(shù)字會被匹配。

請注意:

“行的末尾”表示“就在換行符之前”:多行模式下的測試 $ 匹配所有以換行符 \n 結(jié)尾的位置。

以及在文本末尾的位置。

搜索 \n 而不是 ^ $

要尋找新的一行,我們不僅可以使用錨點 ^ 和 $,也可以使用換行符 \n。

區(qū)別是什么?讓我們看個例子。

在這里我們使用 \d\n 進行搜索,而不是使用 \d$

let str = `Winnie: 1
Piglet: 2
Eeyore: 3`;

console.log( str.match(/\d\n/g) ); // 1\n,2\n

正如我們所看到的,這里找到了 2 個匹配項而不是 3 個。

這是因為在 3 之后沒有換行符(但是有文本末尾,所以它匹配 $)。

另一個區(qū)別是,現(xiàn)在每個匹配項都包含一個換行符 \n。與錨點 ^ $ 不同,錨點只測試條件(行的開始/末尾),而 \n 是一個字符,因此它成為了結(jié)果的一部分。

因此,當(dāng)我們需要結(jié)果中有換行符時,使用 \n。而錨點則用于在行的開頭/末尾查找某些內(nèi)容。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號