[JavaScript] (Day-14) - RegExp 正則表達(dá)式

Happiness is when the desolated soul meets love. 幸福是孤寂的靈魂遭遇愛的邂逅。

正則表達(dá)式(regular expression)描述了一種字符串匹配的模式(pattern),可以用來檢查一個(gè)串是否含有某種子串、將匹配的子串替換或者從某個(gè)串中取出符合某個(gè)條件的子串等。

它不限于任何語言

正則表達(dá)式-百度百科


下面對(duì)正則進(jìn)簡(jiǎn)要介紹:

方括號(hào)

方括號(hào)([])用于正則表達(dá)式的上下文中時(shí)有特殊意義,用來查找一系列字符

表達(dá) 描述
[...] 查找方括號(hào)之間的任何字符
[^...] 查找任何不在方括號(hào)之間的字符
[0-9] 查找任何從 0 至 9 的數(shù)字
[a-z] 查找任何小寫 a 到小寫 z 的字符
[A-Z] 查找任何大寫 A 到大寫 Z 的字符
[a-Z] 查找任何小寫 a 到大寫 Z 的字符

解讀:

  • [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ù)字、字母或者下劃線、$組成的字符串
  • [a-zA-Z\_\$][0-9a-zA-Z\_\$]{0, 19}更精確地限制了變量的長(zhǎng)度是1-20個(gè)字符(前面1個(gè)字符+后面最多19個(gè)字符)。

量詞

方括號(hào)括起來的字符序列或單個(gè)字符出現(xiàn)的頻率或位置可以用一個(gè)特殊的符號(hào)來表示。每個(gè)特殊字符都有一個(gè)特定的含義。+、*、? 和 $ 符號(hào)都遵循一個(gè)字符序列模式

表達(dá) 描述
p+ 匹配任何包含至少一個(gè) p 的字符串
p* 匹配任何包含零個(gè)或多個(gè) p 的字符串
p? 匹配任何包含零個(gè)或一個(gè) p 的字符串
p{N} 匹配包含 N 個(gè) p 的序列字符串
p{2,3} 匹配包含 2 或 3 個(gè) p 的序列的字符串
p{2,} 匹配包含至少 2 個(gè) p 的序列的字符串
p$ 匹配任何結(jié)尾為 p 的字符串
^p 匹配任何開頭為 p 的字符串

元字符

字符 描述
. 單個(gè)字符
\s 空白字符(空格、制表符、換行符)
\S 非空白字符
\d 數(shù)字字符(0-9)
\D 非數(shù)字字符
\w 單詞字符(a-z,A-Z,0-9,_)
\W 非單詞字符
[\b] 一個(gè)文字退格(特殊情況)
[aeiou] 匹配一個(gè)在給定集合內(nèi)的字符
[^aeiou] 匹配一個(gè)不在給定集合內(nèi)的字符
[foo|bar|baz] 匹配任何指定的備選方案

解讀:

  • '00\d'可以匹配'007',但無法匹配'00A';
  • '\d\d\d'可以匹配'010';
  • '\w\w'可以匹配'js';
  • 'js.'可以匹配'jsp'、'jss'、'js!'等等。

解讀\d{3}\-\d{3,8}表達(dá)式
1、\d{3} 表示匹配三個(gè)數(shù)字,例如123, 010
2、\- 表示匹配特殊字符-
3、\d{3,8}表示3到8個(gè)數(shù)字,例如 1234567

綜上所述:可以匹配 010-88888888, 021-12345678


RegExp方法

方法 描述
exec() 檢索字符串中指定的值。返回找到的值,并確定其位置
test() 檢索字符串中指定的值。返回 ture 或 false
toSource 返回一個(gè)對(duì)象字面值代表指定的對(duì)象;您可以使用這個(gè)值來創(chuàng)建一個(gè)新的對(duì)象。
toString() 返回一個(gè)代表指定對(duì)象的字符串。

JavaScript 中正則表達(dá)式的使用

RegExp() 構(gòu)造函數(shù)定義

方式一

var pattern = new RegExp(pattern, attributes);

方式二

var patter = /pattern/attributes;

pattern:是一個(gè)字符串,指定了正則表達(dá)式的模式或其他正則表達(dá)式。
attributes:是一個(gè)可選的字符串,包含屬性 "g"、"i" 和 "m",分別用于指定全局匹配、區(qū)分大小寫的匹配和多行匹配。

兩種寫法是一樣的

實(shí)例:

var re1 = /ABC\-001/;
var re2 = new RegExp('ABC\\-001');

re1; // /ABC\-001/
re2; // /ABC\-001/

如果使用第二種寫法,因?yàn)樽址霓D(zhuǎn)義問題,字符串的兩個(gè)\\實(shí)際上是一個(gè)\。
RegExp對(duì)象的test()方法用于測(cè)試給定的字符串是否符合條件,返回 true 和 false

var re = /^\d{3}\-\d{3,8}$/;
re.test('010-12345'); // true
re.test('010-1234x'); // false
re.test('010 12345'); // false


切分字符串

'a b   c'.split(' '); // ['a', 'b', '', '', 'c']

無法識(shí)別連續(xù)的空格,用正則表達(dá)式試試:

'a b   c'.split(/\s+/); // ['a', 'b', 'c']

無論多少個(gè)空格都可以正常分割。加入,試試:

'a,b, c  d'.split(/[\s\,]+/); // ['a', 'b', 'c', 'd']

再加入;試試:

'a,b;; c  d'.split(/[\s\,\;]+/); // ['a', 'b', 'c', 'd']


分組

用()表示的就是要提取的分組(Group)

var re = /^(\d{3})-(\d{3,8})$/;
re.exec('010-12345'); // ['010-12345', '010', '12345']
re.exec('010 12345'); // null

全局搜索

JavaScript的正則表達(dá)式還有幾個(gè)特殊的標(biāo)志,最常用的是g,表示全局匹配:

var r1 = /test/g;
// 等價(jià)于:
var r2 = new RegExp('test', 'g');

全局匹配可以多次執(zhí)行exec()方法來搜索一個(gè)匹配的字符串。當(dāng)我們指定g標(biāo)志后,每次運(yùn)行exec(),正則表達(dá)式本身會(huì)更新lastIndex屬性,表示上次匹配到的最后索引:

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é)束仍沒有匹配到
最后編輯于
?著作權(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)容

  • 初衷:看了很多視頻、文章,最后卻通通忘記了,別人的知識(shí)依舊是別人的,自己卻什么都沒獲得。此系列文章旨在加深自己的印...
    DCbryant閱讀 4,257評(píng)論 0 20
  • 正則表達(dá)式到底是什么東西?字符是計(jì)算機(jī)軟件處理文字時(shí)最基本的單位,可能是字母,數(shù)字,標(biāo)點(diǎn)符號(hào),空格,換行符,漢字等...
    獅子挽歌閱讀 2,287評(píng)論 0 9
  • 推薦幾個(gè)正則表達(dá)式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:...
    木易林1閱讀 11,854評(píng)論 9 151
  • 幾個(gè)正則表達(dá)式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:ht...
    沒技術(shù)的BUG開發(fā)攻城獅閱讀 4,686評(píng)論 0 23
  • 正則表達(dá)式 \n\n\n 【5】正則表達(dá)式應(yīng)用——?jiǎng)h除空行 啟動(dòng)EditPlus,打開待處理的文本類型文件。 ①、...
    黃花菜已涼閱讀 1,138評(píng)論 0 4

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