JavaScript正則表達式

用法

  1. search():檢索字符串中指定的子字符串,返回子串初始位置
  2. repalce():字符串中替換指定的子字符串
  3. match():找到一個或多個正則表達式的匹配
  4. split():把政府從分割為字符串數(shù)組
  5. RegExp對象
  6. exec():檢索字符串中的正則表達式的匹配,返回一個數(shù)組,存放匹配的結果。無返回null
    7.test():檢測
var str = "Visit Runoob!"; 
var n = str.search(/Runoob/i);
console.log(n)//6

var txt = str.replace(/Runoob/i,"microsoft");
console.log(txt)//Visit microsoft!

//pattern(模式) 描述了表達式的模式
//modifiers(修飾符) 用于指定全局匹配、區(qū)分大小寫的匹配和多行匹配
var patt=new RegExp(pattern,modifiers);
//或者更簡單的方式:
var patt=/pattern/modifiers;
var re= new RegExp("\\w+");
var re=/\w+/;   //與上面的寫法同義
注意:當使用構造函數(shù)創(chuàng)造正則對象時,需要常規(guī)的字符轉義規(guī)則(在前面加反斜杠 \)。

var patt = /e/;
patt.exec("The best things in life are free!");//e

寫法

規(guī)則 描述 規(guī)則 描述
[xyz] 匹配方括號的任何一個字符 [^xyz] 匹配未包含的字符集
\w 數(shù)字字母下劃線 \W 非數(shù)字字母下劃線
\s 空白字符 \S 非空白字符
\d 匹配數(shù)字 \D 匹配非數(shù)字
\b 單詞開頭或結束的位置 \B 非單詞開頭或結束的位置
^ 開始位置 $ 結束位置
修飾符 描述
--i 執(zhí)行對大小寫不敏感的匹配。
--g 執(zhí)行全局匹配(查找所有匹配而非在找到第一個匹配后停止)。
--m 執(zhí)行多行匹配。
--s 正則的原始字符串形式
表達式 描述
[abc] 查找方括號之間的任何字符。
[0-9] 查找任何從 0 至 9 的數(shù)字。
(x|y) 查找任何以| 分隔的選項。
量詞 描述
n+ 匹配任何包含至少一個 n 的字符串。
n* 匹配任何包含零個或多個 n 的字符串。
n? 匹配任何包含零個或一個 n 的字符串。
{n} 指定匹配n數(shù)
{n,} 指定匹配n數(shù)或更多
{n,m} 匹配范圍n-m次

詳解

  • 匹配多個字符{m,n}
    /ab{2,5}c/表示匹配這樣一個字符串:第一個字符是“a”,接下來是2到5個字符“b”,最后是字符“c”
var regex=/ab{2,5}c/g;
//第一個字符是a,第二到第五個字符是b,最后是c;g是全局
var string = "abc abbc abbbc abbbbc abbbbbc abbbbbbc";
console.log( string.match(regex) );
// => ["abbc", "abbbc", "abbbbc", "abbbbbc"]
  • 匹配單個[abc]
    [abc],表示該字符是可以字符“a”、“b”、“c”中的任何一個。
    /a[123]b/可以匹配一下三種字符串:"a1b","a2b","a3b"。

  • 范圍表示法
    [123456abcdefGHIJKLM]?=>?[1-6a-fG-M]
    注意:如果要匹配“a”,"-","z"這三個中的任意一個字符,該怎么做呢?
    ???不能寫成[a-z]因為會被認為是范圍
    ???可以這么寫:[-az](放在開頭)或[az-](放在結尾)或[a-z](轉義符)

  • 簡寫形式
    \d、\D、\w、\W……

  • 貪婪匹配與惰性匹配:

var regex = /\d{2,5}/g;
var string = "123 1234 12345 123456";
console.log( string.match(regex) );
// => ["123", "1234", "12345", "12345"]

??貪婪匹配:正則/\d{2,5}/,表示數(shù)字連續(xù)出現(xiàn)2到5次。會匹配2位、3位、4位、5位連續(xù)數(shù)字。但是其是貪婪的,它會盡可能多的匹配。你能給我6個,我就要5個。你能給我3個,我就3要個。反正只要在能力范圍內(nèi),越多越好。
??惰性匹配:/\d{2,5}?/表示,雖然2到5次都行,當2個就夠的時候,就不在往下嘗試了。對惰性匹配的記憶方式是:量詞后面加個問號

var regex = /\d{2,5}?/g;
var string = "123 1234 12345 123456";
console.log( string.match(regex) );
// => ["12", "12", "34", "12", "34", "12", "34", "56"]

通過在量詞后面加個問號就能實現(xiàn)惰性匹配,因此所有惰性匹配情形如下:

m,n}?
{m,}?
??
+?
*?

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

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