JavaScript與正則表達式

更多內容歡迎來到博客 :https://imjianjian.github.io

正則表達式基礎

元字符

正則表達式中有兩種字符:git

1.元字符.表達式中的特殊字符github

字符 含義
t 水平製表符
v 垂直製表符
n 換行符
r 回車符
0 空字符
f 換頁符
cX 與X對應的控制字符符(Ctrl+X)
。。。 。。。

2.原意文本字符.普通字符,表明本來的意思正則表達式

字符類

  • 正則表達式中的字符與待校驗字符串中的字符一一對應。
  • 能夠用 [ ] 將一些字符歸爲一類
  • 也可使用^取反,例如1

範圍類

若是在字符類中要將每一種狀況都列入曉得太麻煩,對於數字和字母可使用範圍類簡寫,例如:數組

  • [0-9]
  • [a-z]
  • [a-zA-Z]

預約義類

正則表達式還提供了一些預約義類,來對複雜範圍類進行歸納函數

字符 等價 含義
. 2 除了回車和換行符外的全部字符
d [0-9] 數字字符
D 3 非數字字符
s [tnx0Bfr] 空白符
S 4 非空白符
w [a-zA-Z_0-9] 單詞字符(數字,字母,下劃線)
W 5 非單詞字符

字符邊界

字符 含義
^ 以xxx開始
$ 以xxx結束
b 單詞邊界
B 非單詞邊界

量詞

量詞變數所匹配的字符串重複次數this

字符 含義
出現零次或一次(最多一次)
+ 出現一次或屢次(至少一次)
* 出現零次或屢次(任意次)
{n} 出現n次
{n,m} 出現n到m次
{n,} 至少出現n次

貪婪模式與非貪婪模式

貪婪模式

\d{3,6} //儘量多匹配,但最多爲6次

貪婪模式

\d{3,6}? //儘量少匹配,但至少爲3次

分組

使用「()」將匹配規則劃分紅幾個組spa

//"yes"連續出現3次
(yes){3}

//或:|,能夠匹配yes or no或yes and no
yes\b(or|and)\bno

//反向應用
'2017-11-1'.replace(/(\d{4})-(\d{2})-(\d{0,2})/,'$3/$2/$1')
輸出:1/11/2017
三個「()」將正則表示時分爲三組,每組能夠用$n來表示,n即在表達式中出現的次序。該表達式中的三組分別匹配到"2017"、"11"、"1",該函數將匹配到的字符串用第二個參數替換。$3/$2/$1==>2017/11/1

前瞻

前瞻即將匹配到的字符串再向前觀察是否也符合所定義的規則,例如校驗數字前是否帶有「¥」,咱們可使用這個正則表達式:code

\d{0,}(?=¥)
名稱 規則 含義
正向前瞻 exp(?=assert)
反向前瞻 exp(?!assert)
正向後顧 exp(?<=assert) JavaScript不支持
反向後顧 exp(?<=!assert) JavaScript不支持

RegExp對象

簡而言之,正則表達式就是對比校驗字符串是否符合某種規則。regexp

RegExp做爲JavaScript的內置對象表示JavaScript對正則表達式有着原生的支持。對象

建立對象

1.使用構造函數
var reg = new RegExp('\\bimjianjian\\b','g');
2.字面量方式
var reg = /\bimjianjian\b/g

以上兩種方式都能建立js正則表達式對象,都是校驗字符串中是否含有 imjianjian 這個單詞,b表示單詞邊界。且兩種方式中都使用了修飾符,構造函數用第二個參數來傳入,而字面量則直接寫在表達式後。修飾符一共以下三種:

  • g。global全文搜索,不寫則只匹配字符串中的第一個
  • i。ignore case,忽略大小寫,不寫則大小寫敏感
  • m。mutiple lines,多行搜索,不寫則只搜索第一行

對象屬性

  • global:是否全文搜索,默認false
  • ignoreCase:是否大小寫敏感,默認false
  • multiline:多行搜索,默認false
  • lastIndex:當前表達式匹配內容的最後一個字符的下一個位置
  • source:正則表達式的文本字符串

對象方法

test(string)

test() 方法檢索字符串中的指定值。返回值是 true 或 false。

/\bam\b/.test('i am jianjian') //true
/\bam\b/.test('he is jianjian') //false

exec(string)

exec() 方法檢索字符串中的指定值。返回值是被找到的值。若是沒有發現匹配,則返回 null。

若是須要找到全部某個字符的全部存在,在找到第一個匹配的字符後,將存儲其位置。若是再次運行 exec(),則從存儲的位置開始檢索,並找到下一個匹配字符,並存儲其位置。

var str = "this is jianjian"; 
var reg = new RegExp("is","g");
var result;

while ((result = reg.exec(str)) != null)  {
  console.log(result);
  console.log(reg.lastIndex);
 }

conpile(regexp,modifier)

compile() 既能夠改變檢索模式,也能夠添加或刪除第二個參數。即更改匹配規則。

reg=/man/g;
reg2=/(wo)?man/g;
reg.compile(reg2,'i');//將匹配規則改成reg2,且大小寫不敏感

string對象中支持使用正則表達式的方法

search(reg)

檢索與正則表達式相匹配的值。返回第一個與 regexp 相匹配的子串的起始位置。若是沒有找到任何匹配的子串,則返回 -1。search() 方法不執行全局匹配,它將忽略標誌 g。它同時忽略 regexp 的 lastIndex 屬性,而且老是從字符串的開始進行檢索,這意味着它老是返回 stringObject 的第一個匹配的位置。

match(reg|str)

找到一個或多個正則表達式的匹配。返回存放匹配結果的數組。該數組的內容依賴於 regexp 是否具備全局標誌 g。

replace(reg,replacement)

  • reg:正則表達式
  • replacement:替換字符

替換與正則表達式匹配的子串。返回一個新的字符串,是用 replacement 替換了 regexp 的第一次匹配或全部匹配以後獲得的。

split(reg,howmany)

  • reg:正則表達式
  • howmany:返回數組最大長度

按照匹配到的字符做爲切割點。返回切割後的數組。


  1. abc
  2. rn
  3. 0-9
  4. tnx0Bfr
  5. a-zA-Z_0-9
相關文章
相關標籤/搜索