Javascript 錨點(diǎn) ^ $ 的多行模式,修飾符 "m"

2023-02-17 11:01 更新

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

它只影響 ^ 和 $ 的行為。

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

搜索行的開頭 ^

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

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

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

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

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

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

這是因?yàn)槟J(rèn)情況下,錨點(diǎn) ^ 僅匹配文本的開頭,在多行模式下,它匹配行的開頭。

請(qǐng)注意:

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

以及在文本開始的位置。

搜索行的末尾 $

美元符 $ 的行為也類似。

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

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

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

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

請(qǐng)注意:

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

以及在文本末尾的位置。

搜索 \n 而不是 ^ $

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

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

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

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

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

正如我們所看到的,這里找到了 2 個(gè)匹配項(xiàng)而不是 3 個(gè)。

這是因?yàn)樵?nbsp;3 之后沒有換行符(但是有文本末尾,所以它匹配 $)。

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

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


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)