javascript正則表達式是一種用于匹配字符串的強大工具,它允許我們在文本中查找和替換特定的字符、字符串或模式。正則表達式常與字符串函數match()、replace()、search()等一起使用,幫助我們更方便地處理文本。
我們來看一個簡單的例子:假設我們要從以下字符串中找到所有的郵箱地址:
const str = "這是一封測試郵件,我的郵箱是example@123.com,希望您能幫助我核實,謝謝!"; const emailPattern = /\w+@\w+\.\w+/g; const emailArr = str.match(emailPattern); console.log(emailArr); // ["example@123.com"]
上面代碼中,我們用正則表達式定義了一個匹配郵箱地址的模式,其中\w+表示匹配任意個字母、數字或下劃線,@和\.分別表示匹配‘@’和‘.’符號,\w+則表示匹配郵箱域名的字母、數字或下劃線。最后的g表示全局匹配。
正則表達式中的類型可以分為以下幾類:
1、字符類型
字符類型可以用來匹配指定字符或一組字符,用方括號‘[]’來定義,例如:
const pattern = /[abc]/; // 匹配單個字符a、b或c console.log(pattern.test('a')); // true console.log(pattern.test('d')); // false console.log(pattern.test('ab')); // false
方括號內也可以使用‘-’來表示一段字符范圍:
const pattern = /[a-z]/; // 匹配任意小寫字母 console.log(pattern.test('a')); // true console.log(pattern.test('A')); // false console.log(pattern.test('1')); // false
2、元字符
元字符是一些特殊的字符,它們具有特殊的含義,例如:點號('.')、星號('*')、加號('+')、問號('?')等。
點號‘.’表示匹配任意一個字符,例如:
const pattern = /a.b/; // .表示任意字符,可以與‘a’和‘b’之間出現一個任意字符 console.log(pattern.test('axb')); // true console.log(pattern.test('ayb')); // true console.log(pattern.test('ab')); // false
星號‘*’表示匹配前面的字符或子模式0次或多次,例如:
const pattern = /ab*c/; // 匹配‘a’,0或多個‘b’,‘c’ console.log(pattern.test('abc')); // true console.log(pattern.test('ac')); // true console.log(pattern.test('abbc')); // true console.log(pattern.test('accc')); // false
加號‘+’表示匹配前面的字符或子模式1次或多次,例如:
const pattern = /ab+c/; // 匹配‘a’,1或多個‘b’,‘c’ console.log(pattern.test('abc')); // true console.log(pattern.test('ac')); // false console.log(pattern.test('abbc')); // true console.log(pattern.test('accc')); // false
問號‘?’表示匹配前面的字符或子模式0次或1次,例如:
const pattern = /ab?c/; // 匹配‘a’,0或1個‘b’,‘c’ console.log(pattern.test('abc')); // true console.log(pattern.test('ac')); // true console.log(pattern.test('abbc')); // false console.log(pattern.test('accc')); // false
3、邊界類型
邊界類型用來匹配字符串的邊界,例如:^表示匹配字符串的開頭,$表示匹配字符串的結尾,\b表示匹配單詞的邊界(單詞的開頭或結尾)。
例如,我們可以用以下正則表達式來匹配以‘A’開頭的單詞:
const pattern = /^A\w*/; console.log(pattern.test('Apple')); // true console.log(pattern.test('banana')); // false console.log(pattern.test('African')); // true console.log(pattern.test('Art')); // true
此外,邊界類型還可以用來匹配多行文本,例如:
const pattern = /^A\w*/gm; // g表示全局匹配,m表示多行匹配 const str = "Apple\nbanana\nAfrican\nArt"; console.log(str.match(pattern)); // ["Apple", "African", "Art"]
4、分組類型
分組類型用來將一組字符或子模式分為一個整體,并使用括號將它們括起來。
例如,我們可以用以下正則表達式來匹配‘js’或‘javascript’:
const pattern = /java(script)?/; console.log(pattern.test('js')); // true console.log(pattern.test('javascript')); // true console.log(pattern.test('java')); // false
分組類型還可以用來捕獲匹配到的字符或子模式,并在后續操作中使用。例如,以下正則表達式會將電子郵件地址中的用戶名和域名分別捕獲到兩個組中:
const pattern = /(\w+)@(\w+\.\w+)/; const str = "example@123.com"; console.log(str.match(pattern)); // ["example@123.com", "example", "123.com"]
5、修飾符
修飾符用來調整正則表達式的匹配規則,常見的有i(忽略大小寫)、g(全局匹配)、m(多行匹配)。
例如,以下正則表達式用來匹配任意大小寫的‘javascript’:
const pattern = /javascript/i; // i表示忽略大小寫 console.log(pattern.test('JavaScript')); // true console.log(pattern.test('javascript')); // true console.log(pattern.test('JavaScripT')); // true
另外,如果需要在一段文本中多次匹配同一個正則表達式,可以使用全局匹配修飾符‘g’,例如:
const pattern = /abc/g; const str = "abcaabbccabc"; console.log(str.match(pattern)); // ["abc", "abc"]
以上就是javascript正則表達式的幾種類型以及常見的用法,用好它將幫助我們更方便地處理文本數據。