正則表達式

推薦一個網站,檢測你的正則 網站連接javascript

建立正則表達式的方法

  1. 直接建立
var pattern = /s$/
複製代碼
  1. 使用RegExp()構造函數建立
var pattren = new RegExp('s$')
複製代碼

正則特殊字符匹配含義

字符 匹配
[..] 包含括號內的任意字符
[^..] 不在括號裏的任意字符
\w 合法字符,包含數字字母以及_等,我看權威指南寫的其等價於[a-zA-Z0-9],但其實並非,\w對_也合理
\W 等價非法字符
\s 空白符
\S 非空白符號
\d 等價[0-9]
\D 等價[^0-9]

貪婪重複字符語法

注意:如下這個列表匹配的重複字符是儘量多的匹配java

字符 匹配
{n,m} 最少n個,不能超過m個
{n,} 大於等於n次
{n} n次
? 0個或者1個,說明該項是可有可沒有
+ 出現次數大於等於1次
* 出現次數0次或者屢次

示例正則表達式

let a = 'hhhh'
a.match(/[h]+/)
//得出結果:hhhh
複製代碼

非貪婪重複字符語法

這個就至關於在貪婪重複字符的後三個後面加了個?號數組

字符 匹配
?? 0個或者1個,儘量少的匹配
+? 1個或者多個,儘量少的匹配
*? 0個或者多個,儘量少的匹配

示例函數

let a = 'hahahaha'
a.match(/[h]+?/)
//得出結果:["h","h","h","h"] 
複製代碼

選擇、分組、引用

字符 匹配
|
(...) 將括號內的字符看做一個單元,這個單元可經過*,+,?,
(?:...) 只組合,但不記憶與該組相匹配的字符
\n 和第n個分組匹配的字符

錨字符

字符 匹配
^ 匹配字符串的開頭
$ 匹配字符串結尾
\b 匹配單詞邊界
\B 匹配非單詞的邊界
(?=p) 匹配的字符要與p匹配,但不能包括匹配p的那些字符
(?!p) 匹配的字符要不與p匹配

修飾符

字符 匹配
g 全局
i 不分大小寫
m 多行匹配

String執行正則表達式模式匹配和檢索替換操做的方法

search()

其參數是正則表達式,若是不是正則表達式,首先經過new RegExp()轉換爲正則表達式,其返回的是第一個與之匹配的子串的起始位置,若是找不到返回的-1網站

"Javacript".search(/script/) //4
複製代碼

replace()

第一個參數是正則表達式用以匹配字符串,第二個參數是進行替換的字符串。默認只替換第一個匹配的子字符串,若是想全局替換,第一個參數加上/g修飾符ui

'javascriptscript'.replace(/script/, 'haha')//"javahahascript"
'javascriptscript'.replace(/script/g, 'haha')//"javahahahaha"
複製代碼

有一個特殊的地方,若是在替換的字符中出現$加數字,那麼replace()將用與指定的子表達式相匹配的文原本替換這個字符串this

let string2 = "'' '哈哈' 'this is' 'nono'"
let reg = /'([^']*)'/g
string2.replace(reg, "「$1」")//"「」 「哈哈」 「this is」 「nono」"
var str = 'X98Y87Z65';
 var reg = /^X(\d+)Y(\d+)Z(\d+)$/;  // 三個數字部分加了小括號,表示子表達式
 reg.test(str);  // 此處使用exec()等其餘正則表達式的匹配方法也能夠
 console.log(RegExp.$1);  // 98
 console.log(RegExp.$2);  // 87
 console.log(RegExp.$3);  // 65
複製代碼

這裏$1我以爲很重要url

match()

參數是一個正則表達式,返回的是一個由匹配結果組成的數組,若是加了修飾符/g,則該數組的內容是全部知足條件的子字符串,若是沒有加修飾符,只會檢索第一個匹配的字符串,且返回的也是一個數組。若是沒有找到匹配結果返回nullspa

let string3 = "1 and 2 and 3"
string3.match(/\d/g)//["1", "2", "3"]
string3.match(/\d/)//["1", index: 0, input: "1 and 2 and 3", groups: undefined]
複製代碼

split()

將字符串拆分爲一個子串組成的數組

正則表達式執行模式匹配的方法

exec()

和String的match()方法很像,只是其參數是一個字符串,exec的正則表達式無論具不具備全局修飾符/g,它老是返回一個匹配結果。可是加上了/g後,其會將當前正則表達式對象的lastIndex屬性設置爲緊挨着匹配子串的字符位置,能夠看下圖

let string1 = "Hello Hello Hello"
let reg2 = /Hello/
reg2.exec(string1)//["Hello", index: 0, input: "Hello Hello Hello", groups: undefined]
let reg = /Hello/g;
reg.exec(string1)//["Hello", index: 0, input: "Hello Hello Hello", groups: undefined]
複製代碼

test()

其參數也是字符串,其匹配後的結果爲true或false

平常正則表達式

  1. 獲取背景圖片的url
let url = "url(http://www.baidu.com/01.png)"
let reg = /url\(([^\)]+)\)$/
console.log(url.replace(reg, '$1'))
複製代碼
  1. url驗證
let reg3 = /[a-z]+:\/\/[a-z]+/
console.log(reg3.test('http://aa.com'))
複製代碼
  1. email驗證
let reg2 = /^[a-zA-Z0-9]+@[a-zA-Z0-9]+.[a-zA-Z]+/
複製代碼
  1. 去掉先後空格
let reg4 = /^\s+|\s+$/g
console.log(' hahaha '.replace(reg4, ''))
複製代碼
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息