讀阮一峰JavaScript教程書筆記四

1 RegExp之test

var r = /x/g;
var s = '_x_x';

r.lastIndex // 0
r.test(s) // true

r.lastIndex // 2
r.test(s) // true

r.lastIndex // 4
r.test(s) // false

如果正則表達(dá)式帶有g(shù)修飾符,則每一次test方法都從上一次結(jié)束的位置開始向后匹配。
正則表達(dá)式內(nèi)部會記住上一次的lastIndex屬性 。

var r = /x/g;
var s = '_x_x';

r.lastIndex = 4;
r.test(s) // false

r.lastIndex // 0
r.test(s)

帶有g(shù)修飾符時,可以通過正則對象的lastIndex屬性指定開始搜索的位置。

2 RegExp之exec

正則實例對象的exec方法,用來返回匹配結(jié)果。如果發(fā)現(xiàn)匹配,就返回一個數(shù)組,成員是匹配成功的子字符串,否則返回null。

var reg = /a/g;
var str = 'abc_abc_abc'

var r1 = reg.exec(str);
r1 // ["a"]
r1.index // 0
reg.lastIndex // 1

var r2 = reg.exec(str);
r2 // ["a"]
r2.index // 4
reg.lastIndex // 5

var r3 = reg.exec(str);
r3 // ["a"]
r3.index // 8
reg.lastIndex // 9

var r4 = reg.exec(str);
r4 // null
reg.lastIndex // 0

利用g修飾符允許多次匹配的特點,可以用一個循環(huán)完成全部匹配。

var reg = /a/g;
var str = 'abc_abc_abc'

while(true) {
  var match = reg.exec(str);
  if (!match) break;
  console.log('#' + match.index + ':' + match[0]);
}
// #0:a
// #4:a
// #8:a

3 RegExp之string

match,search,replace, split
如果正則表達(dá)式帶有g(shù)修飾符,則該方法與正則對象的exec方法行為不同,會一次性返回所有匹配成功的結(jié)果。

var s = 'abba';
var r = /a/g;

s.match(r) // ["a", "a"]
r.exec(s) // ["a"]

字符串對象的search方法,返回第一個滿足條件的匹配結(jié)果在整個字符串中的位置。如果沒有任何匹配,則返回-1。
split用法:

// 非正則分隔
'a,  b,c, d'.split(',')
// [ 'a', '  b', 'c', ' d' ]

// 正則分隔,去除多余的空格
'a,  b,c, d'.split(/, */)
// [ 'a', 'b', 'c', 'd' ]

// 指定返回數(shù)組的最大成員
'a,  b,c, d'.split(/, */, 2)
[ 'a', 'b' ]
// 例一
'aaa*a*'.split(/a*/)
// [ '', '*', '*' ]

// 例二
'aaa**a*'.split(/a*/)
// ["", "*", "*", "*"]

4 RegExp之字面量字符和元字符

點字符(.)匹配除回車(\r)、換行(\n) 、行分隔符(\u2028)和段分隔符(\u2029)以外的所有字符。

// 從開始位置到結(jié)束位置只有test
/^test$/.test('test') // true
/^test$/.test('test test') // false

正則表達(dá)式中,需要反斜杠轉(zhuǎn)義的,一共有12個字符:^、.、[、$、(、)、|、*、+、?、{和\。

/[^abc]/.test('hello world') // true
/[^abc]/.test('bbc') // false

如果方括號內(nèi)沒有其他字符,即只有[^],就表示匹配一切字符,其中包括換行符。相比之下,點號作為元字符(.)是不包括換行符的。

/a-z/.test('b') // false
/[a-z]/.test('b') // true

只有當(dāng)連字號用在方括號之中,才表示連續(xù)的字符序列。

\d 匹配0-9之間的任一數(shù)字,相當(dāng)于[0-9]。
\D 匹配所有0-9以外的字符,相當(dāng)于[^0-9]。
\w 匹配任意的字母、數(shù)字和下劃線,相當(dāng)于[A-Za-z0-9_]。
\W 除所有字母、數(shù)字和下劃線以外的字符,相當(dāng)于[^A-Za-z0-9_]。
\s 匹配空格(包括換行符、制表符、空格符等),相等于[ \t\r\n\v\f]。
\S 匹配非空格的字符,相當(dāng)于[^ \t\r\n\v\f]。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 概述 正則表達(dá)式(regular expression)是一種表達(dá)文本模式(即字符串結(jié)構(gòu))的方法,有點像字符串的模...
    許先生__閱讀 319評論 0 1
  • 一、概述 正則表達(dá)式(regular expression)是一種表達(dá)字符串結(jié)構(gòu)的方法,有點像字符串的模版,常常用...
    周花花啊閱讀 678評論 0 1
  • 自從年前得空寫了兩篇文章之后就開始忙了,這一忙就是2個月??。當(dāng)時信誓旦旦說的定期寫篇博客的計劃也就泡湯了??,不過好...
    景科同學(xué)閱讀 1,263評論 0 9
  • '^'必須才開頭開始匹配'$'必須在末尾結(jié)束匹配'|' 表示‘或’/ab|cd/匹配ab或者cd'.'表示點字符(...
    zjh111閱讀 471評論 0 0
  • 今天的雨下的真是任性,一會瓢潑,一會牛毛,一會陽光,一會雷電。我一邊收拾東西準(zhǔn)備下班,一邊抱怨天氣,小桑來電話的時...
    周小南閱讀 470評論 0 0

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