JavaScript RegExp 對(duì)象

一、匹配規(guī)則

1).可以匹配任意字符,即'js.'可以匹配'jsp'/'jsx'/'js!'
2)\d可以匹配一個(gè)數(shù)字,即'00\d'可以'007',但無法匹配'00A'
??????'\d\d\d'可以匹配'010'
3)\w可以匹配一個(gè)字母或者數(shù)字,即'\w\w'可以匹配'js'
4)\s表示空白字符
\S表示非空白字符
\t表示制表符
\r表示回車符
4)*表示任意個(gè)字符(包括0個(gè))
5)+表示至少一個(gè)字符
6)用?表示0個(gè)或1個(gè)字符
7)用{n}表示n個(gè)字符
8)用{n,m}表示n-m個(gè)字符

二、案例分析

分析一:

??????\d{3}\s+\d{3,8}
??????\d{3}表示匹配3個(gè)數(shù)字,例如'010'
??????\s+表示匹配至少一個(gè)空白字符,例如 ''/'\t\t'
??????\d{3,8}表示匹配3到8個(gè)數(shù)字,例如 '1234567'
??????綜合起來,上面的正則表達(dá)式可以匹配以任意個(gè)空格隔開的帶區(qū)號(hào)的電話號(hào)碼;
??????\d{3}\-\d\{3,8}可以匹配'010-12345'這樣的號(hào)碼,由于'-'是特殊字符,需要用\轉(zhuǎn)義

分析二:

??????[0-9a-zA-Z\_]可以匹配一個(gè)數(shù)字、字母或者下劃線;
??????[0-9a-zA-Z\_]+可以匹配至少由一個(gè)數(shù)字、字母或者下劃線組成的字符串,比如'a100','0_Z''js2015'
??????[a-zA-Z\_\$][0-9a-zA-Z\_\$]*可以匹配由字母或下劃線、$開頭,后接任意個(gè)由一個(gè)數(shù)字、字母或者下劃線、$組成的字符串,也就是JavaScript允許的變量名
??????[a-zA-Z\_\$][0-9a-zA-Z\_\$]{0,19}更加精確地限制了變量的長度是1-20個(gè)字符(前面1個(gè)字符+后面最多19個(gè)字符)
??????A|B可以匹配A或B,所以(J|j)ava(S|s)cript可以匹配JavaScript,JavascriptjavaScript或者javaScript
??????^表示行的開頭,^\d表示必須以數(shù)字開頭
??????$表示行的結(jié)束,\d$表示必須以數(shù)字結(jié)束,^js$變成了整行匹配,只能匹配js

RegExp

創(chuàng)建正則表達(dá)式的方法:

??????1)使用/正則表達(dá)式/寫出來;
??????2)通過new RegExp('正則表達(dá)式')創(chuàng)建一個(gè)RegExp對(duì)象;

  var re1 = /ABC\-001/;
  var re2 = new RegExp(/ABC\\-001/);
  console.log(re1); // /ABC\-001/
  console.log(re2); // /ABC\\-001/
test()方法
// test()方法用于測(cè)試給定的字符串是否符合條件
  var re = /^\d{3}\-\d{3,8}$/;
  console.log(re.test('010-12345')); // true
  console.log(re.test('010-1234x')); // false
  console.log(re.test('010 12345')); // false
切分字符串split
  var str1 = 'a b   c';
  var str2 = 'a,b   c';
  var str3 = 'a,b;;c  d';
  console.log(str1.split(' ')); // ["a", "b", "", "", "c"]
  console.log(str1.split(/\s+/)); // ["a", "b", "c"]
  console.log(str2.split(/[\s\,]+/)); // ["a", "b", "c"]
  console.log(str3.split(/[\s\,\;]+/)); // ["a", "b", "c", "d"]
分組exec

???????如果正則表達(dá)式中定義了組,就可以在RegExp對(duì)象上用exec()方法提取出子串來,exec()方法在匹配成功后,會(huì)返回一個(gè)Array,第一個(gè)元素是正則表達(dá)式匹配到的整個(gè)字符串,后面的字符串表示匹配成功的子串;exec()方法在匹配失敗時(shí)會(huì)返回null;

  var re = /^(\d{3})-(\d{3,8})$/;
  console.log(re.exec('010-12345')); // ['010-12345', '010', '12345']
  console.log(re.exec('010 12345')); // null
貪婪匹配 +?

???????正則匹配默認(rèn)是貪婪匹配,也就是匹配盡可能多的字符;

// \d+采用貪婪匹配,直接把后面的0全部匹配了,結(jié)果0*只能匹配空字符串了
  var re = /^(\d+)(0*)$/;
  console.log(re.exec('102300')); // ['102300', '102300', '']
// 讓\d+采用非貪婪匹配(也就是盡可能少匹配),才能把后面的0匹配出來,加個(gè)?就可以讓\d+采用非貪婪匹配
  var re = /^(\d+?)(0*)$/;
  console.log(re.exec('102300')); // ['102300', '1023', '00']
全局搜索 g
  var r1 = /test/g;
  // 等價(jià)于:
  var r2 = new RegExp('test', 'g');
var s = 'JavaScript, VBScript, JScript and ECMAScript';
var re=/[a-zA-Z]+Script/g;

// 使用全局匹配:
re.exec(s); // ['JavaScript']
re.lastIndex; // 10

re.exec(s); // ['VBScript']
re.lastIndex; // 20

re.exec(s); // ['JScript']
re.lastIndex; // 29

re.exec(s); // ['ECMAScript']
re.lastIndex; // 44

re.exec(s); // null,直到結(jié)束仍沒有匹配到
search() 方法

???????用于檢索字符串中指定的子字符串,或檢索與正則表達(dá)式相匹配的子字符串;返回第一個(gè)與 regexp 相匹配的子串的起始位置,如果沒有找到任何匹配的子串,則返回 -1,默認(rèn)不執(zhí)行全局匹配;

match() 方法

???????找到一個(gè)或多個(gè)與 regexp 匹配的方法,但這個(gè)方法在很大程序上有賴于 regexp 是否有標(biāo)志g,如果沒有標(biāo)志g,那么match() 方法就只能執(zhí)行一次匹配,如果沒有找到任何匹配的廣本,match() 方法將返回null;
???????如果有標(biāo)志g,則 match() 方法將執(zhí)行全局檢索,找到所有匹配子字符串,若沒有找到任何匹配的子串,則返回 null;

replace()方法

???????如果 regexp 具有全局標(biāo)志 g,那么 replace() 方法將替換所有匹配的子串,否則,它只替換第一個(gè)匹配子串;

  name = '"a", "b"';
  document.write(name.replace(/"([^"]*)"/g, "'$1'")); // 'a','b'
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 傍晚天色昏黃,雨下得滿世界霧蒙蒙的,下班的行人匆忙趕去約會(huì)應(yīng)酬或是回家。一輛黑色寶馬車急駛而過,把凹地處的水濺起老...
    哈哈淳閱讀 1,089評(píng)論 0 3
  • 文/胡興達(dá) 圍繞知識(shí)點(diǎn)體系,基于作業(yè)、測(cè)評(píng)、練習(xí)等教學(xué)應(yīng)用收集數(shù)據(jù),以教育大數(shù)據(jù)分析引擎為工具,通過機(jī)器自主學(xué)習(xí)建...
    wellhu88閱讀 1,238評(píng)論 1 1
  • 很多時(shí)候,人們喜歡明知不可為而為之。明明知道吃虧是福,就偏偏斤斤計(jì)較。 很多時(shí)候,ABCD都對(duì)你那么好,往往TA們...
    MelissaLok閱讀 270評(píng)論 0 0
  • 導(dǎo) 語 不僅唐晶的朋友圈在轉(zhuǎn)發(fā),我們這些吃瓜群眾也在思考這個(gè)問題。從前叫做門當(dāng)戶對(duì)、現(xiàn)在叫做勢(shì)均力敵,真的好嗎? ...
    飄雨桐V閱讀 351評(píng)論 0 0

友情鏈接更多精彩內(nèi)容