JavaScript 替換為正規表示式
有時,我們想要替換字串中的特定單詞或編寫正規表示式(也稱為正規表示式)以用新值替換模式。
為此,如果我們有一個小字串,我們可以獲得 replace()
函式的優勢,或者可以使用 RegExp
物件的方法在長字串(段落)中查詢模式並將其替換為新單詞/值.
在 JavaScript 中使用 replace()
函式
replace()
函式搜尋字串並將其替換為新字串而不更改原始字串。此函式替換第一個匹配項,然後停止。
這就是為什麼我們使用正規表示式來滿足我們驗證文字和搜尋文字的需求。我們可以使用正規表示式執行全域性、多行或不區分大小寫的匹配來替換字串。
示例程式碼:
let p = "Hello JavaScript World, I am diving into the javascript world."
console.log(p.replace("JavaScript", "Python"));
輸出:
"Hello Python World, I am diving into the javascript world."
在上面給出的輸出中,我們可以觀察到 replace()
函式在替換第一個匹配項後停止。此限制導致帶有修飾符的正規表示式,也稱為標誌。
在 JavaScript 中替換為 Regex(正規表示式)
我們使用 i
標誌進行不區分大小寫的搜尋,這意味著 World
和 world
是相同的。test()
方法檢查並在模式存在時返回 true
。
示例程式碼:
let p = "Hello JavaScript World, I am diving into the javascript world."
const pattern = /javascript/i;
if(pattern.test(pattern)){
let result = p.replace(pattern, "Python");
console.log(result);
}
輸出:
"Hello Python World, I am diving into the javascript world."
看,第一個 JavaScript
單詞被替換為 Python
,儘管我們試圖匹配小寫 javascript
。這是因為 i
標誌,但它也在第一場比賽後停止。
現在,如果我們有多個句子或字串怎麼辦?我們使用 g
修飾符來執行全域性匹配並替換所有匹配的單詞/模式。
示例程式碼:
let p = "Hello JavaScript World, I am diving into the javascript world. It was good to learn JavaScript."
const pattern = /JavaScript/g;
if(pattern.test(pattern)){
let result = p.replace(pattern, "Python");
console.log(result);
}
輸出:
"Hello Python World, I am diving into the javascript world. It was good to learn Python."
請記住,g
標誌進行區分大小寫的匹配。這就是為什麼在上面的輸出中沒有替換 javascript
。
如果我們也想替換它,我們可以使用帶有 g
標誌的 i
標誌。看看下面的程式碼。
let p = "Hello JavaScript World, I am diving into the javascript world. It was good to learn JavaScript."
const pattern = /JavaScript/gi;
if(pattern.test(pattern)){
let result = p.replace(pattern, "Python");
console.log(result);
}
輸出:
"Hello Python World, I am diving into the Python world. It was good to learn Python."
如果我們有一個字串分佈在多行上怎麼辦?在這裡,m
標誌進入動作並進行多行匹配。
m
標誌不僅使用 ^
在開頭匹配,使用 $
符號匹配每行的末尾,還可以匹配一行的開始/結束。
示例程式碼:
let p = `1.JavaScript\n
2.Python
3.Java.`
const pattern = /^\d/mg;
if(p.match(pattern)){
let result = p.replace(pattern, "ListItem");
console.log(result);
}
輸出:
ListItem.JavaScript
ListItem.Python
ListItem.Java.
如果我們從上面的示例中刪除 m
標誌,它只會替換第一行的模式(參見下面的程式碼)。
let p = `1.JavaScript\n
2.Python
3.Java.`
const pattern = /^\d/g;
if(p.match(pattern)){
let result = p.replace(pattern, "ListItem");
console.log(result);
}
輸出:
ListItem.JavaScript
2.Python
3.Java.
使用下面的示例程式碼,我們可以看到還可以在每一行的末尾找到模式並將它們替換為所需的值。
let p = `1.JavaScript 1\n
2.Python 2
3.Java 3`;
const pattern = /\d$/gm;
if(p.match(pattern)){
let result = p.replace(pattern, "ListItem");
console.log(result);
}
輸出:
1.JavaScript ListItem
2.Python ListItem
3.Java ListItem
到目前為止,我們已經研究了正規表示式的字面表示法。當我們知道模式將保持不變時使用此表示法。
否則,如果我們懷疑模式會改變,最好使用建構函式。以下是建構函式的示例。
let p = "Hello JavaScript World, I am diving into the javascript world. It was good to learn JavaScript.";
const pattern = new RegExp('\javascript', 'gi');
console.log(p.replace(pattern, "Python"));
輸出:
"Hello Python World, I am diving into the Python world. It was good to learn Python."