正則

什麼是正則

正則是就是一個規則,處理字符串的規則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');
複製代碼

元字符

在//之間有自身意義的字符,每一個元字符都由元字符和修飾符組成。字符串

具備特殊意義的元字符

  • \ 轉義字符
  • ^ 以某個元字符開始
  • $ 以某個元字符結束
  • \n 匹配一個換行符
  • . 除\n以外任意字符
  • () 分組,把大正則,劃分幾個小正則
  • x|y x或者y
  • [xyz] xyz中的一個字符
  • [^xyz] xyz以外的任何一個字符
  • [a-z] a到z之間任何一個字符
  • \d 0-9之間任何一個數字
  • \b 匹配一個邊界符
  • \w 數字、字母、下劃線中的一個
  • \s 匹配一個空白符(空格,製表符,換頁符)
  • \D 非數字
  • \B 非邊界符
  • \W 非數字,非字母,非下劃線
  • \S 非空白符

表明出現次數的量詞元字符

  • '*' 0-屢次
  • '+' 1-屢次
  • '?' 0-1次
  • {n} n次
  • {n,} n到屢次
  • {n,m} n-m次

中括號的特色

一、中括號中全部字符都只表明自己的意思,沒有特殊含義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');
複製代碼

三、分組捕獲,正則捕獲時先匹配大正則,再匹配小分組

字符串replace和正則結合使用

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';
})
複製代碼
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息