基本表示符
字符 | 說明 |
---|---|
\d | 任何一個數字字符(等價于[0-9]) |
\D | 任何一個非數字字符(等價于[^0-9]) |
\w | 任何一個字符(字母/數字/下劃線)([a-zA-Z0-9_]) |
\W | 任何一個非字符(非字母/數字/下劃)([^a-zA-Z0-9_]) |
\s | 任何一個空白字符(等價于[\f\n\r\t\v]) |
\S | 任何非一個空白字符(等價于[^\f\n\r\t\v]) |
\b | 匹配詞的邊界。 |
\B | 匹配非詞邊界,即在詞的內部。 |
* | 零個或多個(等價于{0,}) |
+ | 一個或多個(等價于{1,}) |
? | 零個或一個(等價于{0,1}) |
. | 除換行符外的任意單個字符 |
- *?:表示某個模式出現0次或多次,采用非貪婪模式,匹配盡量少
- +?:表示某個模式出現1次或多次,采用非貪婪模式,匹配盡量少
數量 | 說明 |
---|---|
{} | 表示精確匹配次數 |
{n} | 表示恰好重復n次 |
{n,} | 表示至少重復n次 |
{n,m} | 表示重復n到m次 |
^ | 定義字符串開頭 |
$ | 定義字符串結尾 |
標志 | 描述 |
---|---|
g | 全局搜索(用于搜素替換) |
i | 不區分大小寫搜索 |
m | 多行搜索 |
方法名 | 返回值 | 類型 |
---|---|---|
exec | 返回一個數組,未匹配返回null,匹配一個 | RegExp |
test | 返回true或false,匹配一個 | RegExp |
match | 返回一個數組,未匹配返回null,匹配所有 | String |
search | 返回匹配到的位置索引,未匹配返回-1 | String |
replace | 查找并且替換掉匹配到的子字符串 | String |
split | 分隔一個字符串并將分隔后的子字符串存儲到數組中 | String |
- 如果想知道一個字符是否被找到,可以使用
test
或search
方法 - 如果想返回找到的具體字符,則可以使用
exec
或match
方法
創建正則表達式
let regex = /xyz/; //編譯時新建
let regex1 = new RegExp('xyz'); //運行時新建
轉義符
- 使用
RegExp
方法生成正則對象,轉義需用兩個斜杠,因為字符串內部會先轉義一次,需要用斜杠轉義的,一共有12個字符:
^ . [ $ ( ) | * + ? { \\
(new RegExp('1\+1')).test('1+1')
// false
(new RegExp('1\\+1')).test('1+1')
// true
幾種方法的比較
//前兩種是String類型,后兩種是RegExp類型
let s = 'abba';
let r = /a/g;
console.log(s.match(r)); // 返回所有匹配["a", "a"]
console.log(s.search(r)); //找到索引0
console.log(r.exec(s)); // 匹配一個就返回["a"]
console.log(r.test(s)); //true
-
String
類型是用字符串去匹配模式 -
RegExp
類型是用模式去測量字符串 -
RegExp
方法在有g
存在的情況下lastIndex
有效 -
String
方法會忽略g
,laseIndex
無效
組匹配
let reg = /d(b+)d/g;
console.log(reg.exec("cdbbdbsbzdbd")); //["dbbd", "bb"]
console.log("cdbbdbsbzdbd".match(reg)); //["dbbd", "dbd"]
如果正則表示式包含圓括號(即含有“組匹配”),則返回的數組會包括多個成員,第一個成員是整個匹配的結果,第二個成員是圓括號匹配的結果
相關文章推薦:
RegExp對象
正則表達式
最全的常用正則表達式大全
用正則表達式匯總