正則是就是一個規則,處理字符串的規則javascript
判斷字符串是否符合規則--reg.test(str)java
捕獲到符合規則的字符串中的內容--reg.exec(str)ui
一、對象字面量方式spa
var reg = /\d/
複製代碼
二、實例建立方式code
var reg = new RegExp('\\d');
複製代碼
三、兩種方式區別regexp
1)字面量建立方式中,兩個斜槓之間都是元字符對象
2)針對要求字符串拼接的需求,只能用實例建立方式ip
var reg1 = new RegExp('^\\d+'+ name + '\\d+$', 'g');
複製代碼
在//之間有自身意義的字符,每一個元字符都由元字符和修飾符組成。字符串
一、中括號中全部字符都只表明自己的意思,沒有特殊含義input
var reg2 = /^[.]$/;
console.log(reg2.test('1')); //false
console.log(reg2.test('.')); //true
複製代碼
二、中括號不識別兩位數
懶惰性:匹配到第一個符合的就結束
貪婪性:每次都匹配最長結果
g:global
var str = '12345';
var r1 = /\d/;
console.log(str.match(r1)); // ["1", index: 0, input: "12345", groups: undefined]
var r2 = /\d/g;
console.log(str.match(r2)); // ["1", "2", "3", "4", "5"]
複製代碼
量詞元字符後加?
var str = '12345';
var r1 = /\d+/;
console.log(str.match(r1)); // ["12345", index: 0, input: "12345", groups: undefined]
var r2 = /\d+?/;
console.log(str.match(r2)); // ["1", index: 0, input: "12345", groups: undefined]
複製代碼
一、普通元字符後,表示出現0-1次
二、量詞元字符後,取消捕獲的貪婪性
三、在(?:)在分組中,表示只匹配不捕獲
一、改變優先級
二、分組引用
// 注意 \2表明第二個分組出現如出一轍的內容;\1表明和第一個分組出現如出一轍的內容;
// 如出一轍,表示值也同樣。
var r3 = /^(\w)\1(\w)\2$/;
r3.test('xxll');
複製代碼
三、分組捕獲,正則捕獲時先匹配大正則,再匹配小分組
var s5 = 'z123z345';
// console.log(s5.replace(/(z)\d+/g, 'xl'));
// 首先和exec相同,把全部符合正則的全都捕獲到,而後把捕獲到的內容,全都替換成目標內容。
s5.replace(/(z)\d+/g, function () {
console.log('ok');
console.log(arguments); //和exec捕獲到的結果相似
console.log(RegExp.$1); //獲取分組中的內容。 ie下不兼容
return 'xl';
})
複製代碼