JS正則02——js正則表達式中常用的方法、常見修飾符的使用詳解以及各種方法使用情況示例
- 1. 前言
- 1.1 簡介
- 1.2 js正則特殊字符即使用示例
- 2. 創建正則表達式的方式
- 2.1 兩種創建正則表達式的方式
- 2.2 關于修飾符
- 3. 正則表達式中常用的方法
- 3.1 test() 方法——正則表達式對象的方法
- 3.2 search()方法——字符串對象的方法
- 3.3 replace()方法——字符串對象的方法
- 3.3.1 語法
- 3.3.2 例子
- 3.3.2.1 不使用正則例子
- 3.3.2.2 使用正則例子
- 3.4 split()方法——字符串對象的方法
- 3.4.1 語法
- 3.4.2 例子
- 3.5 match()方法——字符串對象的方法
- 3.5.1 關于match()方法
- 3.5.2 match()的例子
- 3.6 exec()方法——正則表達式對象的方法
- 4. 關于特定字符`()`——分組 + 捕獲
- 4.1 描述
- 4.2 示例
- 5. 總結關于常見修飾符的使用
- 6. 參考
1. 前言
1.1 簡介
- JavaScript正則表達式是一種強大的工具,用于在字符串中匹配和操作文本。它可以用來驗證輸入的格式、提取特定的文本、替換文本等。
1.2 js正則特殊字符即使用示例
- 可以看上篇文章,如下
JS正則01——JS正則表達式中各元字符的詳細介紹以及常用的js正則示例.
2. 創建正則表達式的方式
2.1 兩種創建正則表達式的方式
-
使用字面量創建:
- 語法如下:
var regex = /pattern/modifiers; // 修飾符 modifiers 可以省略
- 舉例如下:
var regex = /hello/; // 匹配包含"hello"的字符串var regex_2 = /^hello$/; //嚴格匹配,只能匹配"hello"字符串var regex_3 = /^hello$/i; //只能匹配"hello"字符串,但不區分大小寫匹配
- 語法如下:
-
使用構造函數創建:
- 語法如下:
var regex = new RegExp("pattern");或var regex = new RegExp("pattern","modifiers");
- 舉例如下:
var value = "hEllo";var regex = new RegExp("hello"); // 匹配包含"hello"的字符串 var regex_2 = new RegExp("^hello$"); // 嚴格匹配,只能匹配"hello"字符串 var regex_3 = new RegExp("^hello$","i"); //只能匹配"hello"字符串,但不區分大小寫匹配alert( regex.test(value) ); // true-匹配成功 false-匹配失敗
- 語法如下:
2.2 關于修飾符
- 常用的JavaScript正則表達式修飾符如下:
i
:不區分大小寫(在匹配時忽略大小寫)。g
:全局匹配(查找所有匹配項,而不僅僅是第一個)。m
:多行匹配,將開始和結束字符(^和$)視為多行的開始和結束,而不僅僅是整個字符串的開始和結束。s
:單行匹配,使點(.)元字符匹配包括換行符在內的任何字符。u
:Unicode匹配(啟用完整的Unicode匹配模式,將模式視為由Unicode代碼點組成的序列)。y
:粘性匹配(只從目標字符串的當前位置開始匹配)。
- 關于使用例子,下面我們會介紹,請繼續……
3. 正則表達式中常用的方法
3.1 test() 方法——正則表達式對象的方法
test()
:- 用于檢測字符串是否匹配正則表達式。返回值為布爾值,如果匹配成功則返回true,否則返回false。
- 如果只需判斷字符串是否匹配正則表達式,可以使用該
test()
方法。
- 上面《2.1 兩種創建正則表達式的方式》中以及上篇文章都是用 test() 方法說的示例,所以此處不再介紹。
3.2 search()方法——字符串對象的方法
search()
:
用于在字符串中查找與正則表達式匹配的第一個位置。返回匹配到的位置索引。如果沒有匹配到,則返回 -1。- 例子:
var value = "abc-hello-123"; var regex = /hello/; alert( value.search(regex) ); // 返回4 (注意:search() 是字符串的方法,并且字符串的index從0開始)
var value = "abc-hello-123"; var regex = /^hello$/; alert( value.search(regex) ); // 返回-1(因為同時使用 ^和$ 時是嚴格匹配)
3.3 replace()方法——字符串對象的方法
3.3.1 語法
- replace():
- JavaScript中的正則表達式replace()方法用于在字符串中替換匹配的文本。
- 語法:
string.replace(regexp|substr, newSubstr|function)
regexp|substr
:可以是一個正則表達式或者一個要被替換的子字符串。newSubstr|function
:可以是一個新的字符串或者一個用于替換的函數。- 如果第一個參數是一個正則表達式,replace()方法將會替換所有匹配的文本。如果第一個參數是一個字符串,replace()方法只會替換第一個匹配的文本。
3.3.2 例子
3.3.2.1 不使用正則例子
- 如下:
var value = "abc-hello-123-hello-567";alert( value.replace("hello","good") ); // 返回 abc-good-123-hello-567(非正則表達式時:只替換第一個匹配的文本)
3.3.2.2 使用正則例子
- 例子1——第二個參數是新字符串:
var value = "abc-hello-123-hello-567"; var regex = /hello/; alert( value.replace(regex,"good") ); // 返回 abc-good-123-hello-567(只替換第一個hello)
var value = "abc-hello-123-hello-567"; var regex = /hello/g; alert( value.replace(regex,"good") ); // 返回 abc-good-123-good-567(使用 g 可以全局替換,不只是替換第一個)
- 例子2——第二個參數是函數:
var value = "abc-hello-123"; var regex = /hello/; var newValue = value.replace(regex, function(str) {return str.toUpperCase(); });alert(newValue); // 返回:abc-HELLO-123
3.4 split()方法——字符串對象的方法
3.4.1 語法
- JavaScript中的正則表達式
split()
方法用于將字符串分割成數組,根據指定的正則表達式模式進行分割。 - 語法:
str.split(regexp|separators)
3.4.2 例子
- 例子1——使用一般分隔符分割,不使用正則表達式
var value = "apple;banana;orange";console.log(value.split(";")); //輸出: ['apple', 'banana', 'orange']
- 例子2——使用正則表達式
var value = "I-123-love-456-you";var regex = /[-]\d+[-]/; console.log(value.split(regex)); //輸出: ['I', 'love', 'you']
3.5 match()方法——字符串對象的方法
3.5.1 關于match()方法
- 關于match()方法
- 通過調用該方法可以在字符串中查找匹配的內容。
- 如果 regexp 沒有標記 g,那么它會以數組形式返回第一個匹配結果,數組中包含捕獲組和屬性 index(匹配位置)、input(輸入字符串,等于 str):。
- 如果正則表達式具有全局標志(g),
match()
方法將返回一個數組,包含所有匹配到的內容。 - 如果沒有找到匹配項,則返回null。
- 語法:
str.match(regexp)
3.5.2 match()的例子
- 例子1——:不使用全局匹配(g)
var value = "abc-hello-123-hello-567";var regex = /hello/;var result = value.match(regex); // 匹配結果var match = result[0]; // 匹配到的字符串 var index = result.index; // 匹配到的字符串在原始字符串中的索引位置(第一個位置)console.log(result); // 輸出匹配到的字符和其他信息 console.log(result=="hello"); // 輸出true console.log(match); // 輸出 hello console.log(index); // 輸出 4
- 例子2——:使用全局匹配(g)
var value = "abc-hello-123-hello-567";var regex = /hello/g; // 使用 g 可以全局替換,不只是替換第一個var result = value.match(regex); // 匹配結果console.log(result); // 輸出匹配結果數組:['hello', 'hello']
3.6 exec()方法——正則表達式對象的方法
- 關于
exec()
方法exec()
是 JavaScript 正則表達式對象的一個方法,用于在字符串中執行匹配操作。exec()
方法返回一個數組,包含匹配到的內容以及其他相關信息,如果沒有找到匹配項,則返回null。exec()
方法好像不支持全局匹配,只能匹配第一個,設置了 g 不生效!
- 例子:
var value = "abc-hello-123-hello-567";var regex = /hello/;var result = regex.exec(value); // 匹配結果var match = result[0]; // 匹配到的字符串 var index = result.index; // 匹配到的字符串在原始字符串中的索引位置console.log(result); console.log(match); // 輸出 hello console.log(index); // 輸出 4
4. 關于特定字符()
——分組 + 捕獲
4.1 描述
()
括號在正則表達式中有特殊的含義,用于分組和捕獲匹配的內容。- 分組:
()
可以將多個字符組合成一個單元,形成一個子表達式。例如,/(ab)+/可以匹配連續出現的"ab"字符串,如"abab"、"ababab"等。 - 捕獲:
()
還可以用于捕獲匹配的內容,以便后續使用。捕獲的內容可以通過$1、$2等變量進行引用。例如,/(\d{4})-(\d{2})-(\d{2})/
可以匹配日期格式,同時將 年、月、日分別捕獲到 $1、$2、$3 中。
- 分組:
4.2 示例
- 分組示例:
/(abc)+/
:匹配連續出現的"abc"字符串,如"abcabc"、"abcabcabc"等- 更多示例也可以看上篇文章的例子,好多用到了分組:
JS正則01——JS正則表達式中各元字符的詳細介紹以及常用的js正則示例.
- 捕獲示例:
- 示例1:匹配日期格式,如"2022-12-29",并將年、月、日分別捕獲到$1、$2、$3中。
let str_0 = "2022-12-29";var regex_0 = /(\d{4})-(\d{2})-(\d{2})/;let result_0 = str_0.match(regex_0); //匹配結果console.log(result_0);console.log(result_0[0]); // 輸出 2022-01-01(匹配到的字符串)console.log(result_0[1]); // 輸出 2022(捕獲到的) console.log(result_0[2]); // 輸出 12(捕獲到的) console.log(result_0[3]); // 輸出 29(捕獲到的)
- 示例2:
let str = "I love JavaScript";// var regex = /JavaScript/; var regex = /Java(Script)/; let result = str.match(regex);console.log(result); console.log( result[0] ); // 輸出 匹配結果:JavaScript (full match) console.log( result[1] ); // 輸出 捕獲組:Script (first capturing group) console.log( result.length ); // 2// Additional information: console.log( result.index ); // 7 (match position) console.log( result.input ); // I love JavaScript (source string)
- 示例1:匹配日期格式,如"2022-12-29",并將年、月、日分別捕獲到$1、$2、$3中。
5. 總結關于常見修飾符的使用
i
:不區分大小寫匹配var value = "HeLLo";var regex = /^hello$/i; // var regex = new RegExp("^hello$","i"); // 使用構造函數創建方式alert(regex.test(value));
g
: 全局匹配(查找所有匹配項,而不僅僅是第一個)。
這個參考上面寫的《3.5.2 match()的例子》中的例2,已經使用了這個修飾符,所以此處不介紹了。g和i
結合var value = "HeLLo-1-aa-hello-b-hEllo";// 下面兩種正則方式均可以 var regex = /hello/gi; // 既全局匹配 又 忽略大小寫匹配 var regex_2 = new RegExp("hello","gi"); var result = value.match(regex);console.log(result); // 輸出: ['HeLLo', 'hello', 'hEllo']
6. 參考
- 如下:
https://javascript.info/regexp-methods.