JS學習記錄(二)

正則表達式

正則表達式是用來匹配字符串中的字符組合的模式。

創建正則表達式有以下兩種方式:

使用正則表達式字面量,如:

Var re = /ab/;

調用RegExp對象的構造函數,如:

var re = new RegExp("ab+c");

RegExp第二個參數flags爲可選參數,flags的值可爲i,g,m中的其中一個或者多個的組合。g(global)是全局標誌。如果設置了這個標誌,對某個文本執行搜索和替換操作時,將對文本中所有匹配的部分起作用。如果不設置這個標誌,則僅搜索和替換最早匹配的內容。i(ignoreCase)是忽略大小寫標誌。如果設置了這個標誌,進行匹配比較時,將忽略大小寫。m(multiLine)是多行標誌。如果不設置這個標誌,那麼元字符“^”只與整個被搜索字符串的開始位置相匹配,而元字符“$”只與被搜索字符串的結束位置相匹配。如果設置了這個標誌,“^”還可以與被搜索字符串中的“\n”或“\r”之後的位置(即下一行的行首)相匹配,而“$”還可以與被搜索字符串中的“\n”或“\r”之後的位置(即下一行的行尾)相匹配。

1、簡單模式

        簡單的模式是有你找到的直接匹配所構成的。比如,/abc/這個模式就匹配了在一個字符串中,僅僅字符'abc'同時出現並按照這個順序  

2、使用特殊字符

字符

含義

\

\在字符串裏面是一個轉義字符。用於將一些特殊字符進行轉義。

^

匹配輸入的開始。如果多行標示被設置爲true,同時匹配換行後緊跟的字符。

比如,/^A/並不會匹配/^A/中的‘A’,但是會匹配“An E”中的‘A’

當這個字符出現在一個字符集合模式的第一個字符的時候,它將會有不同的意義。

比如,/[^a-z\s]/會匹配“my 3 sisters”中的‘3’,即當^出現在字符集合模式時,代表以該字符集合中的字符爲

開頭(字符集的裏面的字符可以出現0次或多次),返回的時開頭字符之後的第一個字符。如果/[^a-z\s]+/則返回

開頭後的字符一直到再出現[a-z\s]字符集中的字符爲止(或者字符串結束爲止)

$

匹配輸入的結束,如果多行標示被設置爲true,同時會匹配換行前緊跟的字符。

比如,/t$/並不會匹配“eater”中的‘t’,但是會匹配“eat”中的。

*

匹配前一個字符0次或者是多次。

比如,/bo*/會匹配“A ghost boooooed”中的'boooo'‘A bird warbled’中的‘b’

但是在“A goat grunted”中將不會匹配任何東西。

+

匹配前面一個字符1次或者多次,和{1,}有相同的效果。

如,/a+/匹配了在“candy”中的a,和在"caaaaaaandy"中所有的a

?

匹配前面一個字符0次或者1次,和{0,1}有相同的效果。

比如,/e?le?/匹配“angel”中的‘el’,和"angle"中的‘le’以及“oslo”中的'l'

如果'?'緊跟在在任何量詞*, + , ?,或者是{}的後面,將會使量詞變成非貪婪模式(匹配最少的次數),

和默認的貪婪模式(匹配最多的次數)正好相反。

比如,使用/\d+/非全局的匹配“123abc”將會返回“123”,如果使用/\d+?/,那麼久只會匹配到“1”

同時運用在向前斷言,在本表的x(?=y)x(?!y)中有描述。

.

(The decimal point) matches any single character except the newline character.

(小數點)匹配任何除了新一行字符的任何單個字符。

比如,/.n/將會匹配‘nay, an apple is on the tree’中的‘an’‘on’,但是不會匹配'nay'

(x)

匹配‘x’並且記住匹配項。這個被叫做捕獲括號。

比如,/(foo)/匹配和記住了“foo bar”中的'foo'。匹配到子字符串可以通過結果數組的[1],...,[n]元素進行訪問。

(?:x)

匹配'x'但是不記住匹配項。這種被叫做非捕獲括號。匹配到的子字符串不能通過結果數組的[1],...,[n]進行訪問。

x(?=y)

匹配'x'僅僅當'x'後面跟着'y'.這種叫做向後查詢。

比如,/Jack(?=Sprat)/會匹配到'Jack'僅僅當它後面跟着'Sprat'

/Jack(?=Sprat|Frost)/匹配‘Jack’僅僅當它後面跟着'Sprat'或者是‘Frost’

但是‘Sprat’‘Frost’都不是匹配結果的一部分。

x(?!y)

匹配'x'僅僅當'x'後面不跟着'y',這個被叫反向向前查找。

比如,/\d+(?!\.)/匹配一個數字僅僅當這個數字後面沒有跟小數點的時候。

正則表達式/\d+(?!\.)/.exec("3.141")匹配‘141’但是不是‘3.141’

x|y

匹配‘x’或者‘y’

比如,/green|red/匹配“green apple”中的‘greem’“red apple”中的‘red’

{n}

n是一個正數,匹配了前面一個字符剛好發生了n次。

比如,/a{2}/不會匹配“candy”中的'a',但是會匹配“caandy”中所有的a,“caaandy”中的前兩個'a'

{n,m}

匹配前面一個字符nm

[xyz]

字符集,即匹配其中任意一個字符即可

[^xyz]

匹配不包含在該字符集中的其他字符

\b

匹配單詞的開始或結束.

比如:/\babc/匹配abcd中的abc,但是不匹配aabc中的abc

\B

匹配不是單詞開頭或結束的位置.

比如:\/Bbc/B\匹配abcd中的bc,但比匹配abc或者bcd中的bc

\d

匹配數字字符

\D

匹配非數字字符

\f

換頁符 (U+000C).

\n

換行符 (U+000A).

\r

回車符 (U+000D).

\s

匹配空格

\S

匹配非空格

\t

製表符 (U+0009).

\v

垂直製表符(U+000B).

\w

匹配數字、字母、下劃線

\W

匹配非數字、字母、下劃線

\n

n爲數字時,表示對第n個匹配結果的引用,如:

 /apple(,)\sorange\1/ 匹配"apple, orange, cherry, peach."中的 'apple, orange,',此處\1表示第

一個匹配結果,即逗號

\0

匹配null


使用正則表達式

正則表達式可以通過RegExp的方法:test和exec和String的方法:match、search、replace、split方法使用。具體如下:

方法

描述

exec

RegExp的方法,用於搜索匹配的字符,返回匹配字符數組。

test

RegExp的方法,用於測試正則表達式是否匹配string中的字符,如果有匹配則返回true,否則返回false

match

String的方法,執行搜索匹配的字符,當有匹配時,返回匹配字符的數組,否則返回null

search

String的方法,返回匹配字符在string中的索引,如無匹配返回-1。如:"saaaaa".search(/a/g)返回1,返回匹配的第一個字符的爲止

replace

String的方法,將字符串中匹配的字符替換成要替換的字符

split

String的方法,以字符串以字符或者正則表達式匹配的字符爲分割符,將字符串分割爲數組

使用括號匹配的字符

1、        正則表達式中使用

/a(b+)c\1/.exec(“abbcbbsdf”),\1表示第一個括號即(b+)的匹配字符,此處爲bb

2、        replace中使用

使用美元符號$加數字,如$1表示第一個括號匹配的字符。如:

var re = /(\w+)\s(\w+)/;

var str = "John Smith";

var newstr = str.replace(re, "$2,$1");

console.log(newstr);

//此處$1表示第一個括號匹配的結果即john,$2表示第二個括號裏的匹配結果即Smith.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章