1. 程式人生 > >008-js中的正則表達式

008-js中的正則表達式

多行匹配 reg 換行 cto mat odi hello word 例如

查看地址:http://www.runoob.com/js/js-regexp.html

一、正則表達式概述

  正則表達式(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE)使用單個字符串來描述、匹配一系列符合某個句法規則的字符串搜索模式。

  搜索模式可用於文本搜索和文本替換。

二、正則表達式語法

/正則表達式主體/修飾符(可選)

示例:var patt = /runoob/i

三、正則表達式修飾符

修飾符 描述
i intensity 執行對大小寫不敏感的匹配。
g global 執行全局匹配(查找所有匹配而非在找到第一個匹配後停止)。
m multiple 執行多行匹配。檢測字符串中的換行符,主要是影響字符串開始標識符^和結束標識符$的使用

四、正則表達式模式

^ //指出一個字符串的開始 
$ //指出一個字符串的結束 
[] //用於查找某個範圍內的字符
| //或 模式

特殊字符:

  使用轉義字符\即可。如var reg=/\//;匹配一個正斜杠

  正則中有特別含義的字符匹配,都需要\來轉義,如:\ . * ^ & [ ] { } ? 等

  註意:如果在[]字符集合裏,很多字符都不需要轉義

4.1、量詞

量詞理解描述
n+

>=1

匹配一個或多個n 的字符串。

例如,/a+/ 匹配 "candy" 中的 "a","caaaaaaandy" 中所有的 "a"。

n*

>=0

匹配零個或多個 n 的字符串。

例如,/bo*/ 匹配 "A ghost booooed" 中的 "boooo","A bird warbled" 中的 "b",但是不匹配 "A goat grunted"。

n?

=0或=1

匹配零個或一個 n 的字符串。

例如,/e?le?/ 匹配 "angel" 中的 "el","angle" 中的 "le"。

n{X}

按照閉區間集合

=X

匹配包含 X 個 n 的序列的字符串。

例如,/a{2}/ 不匹配 "candy," 中的 "a",但是匹配 "caandy," 中的兩個 "a",且匹配 "caaandy." 中的前兩個 "a"。

n{X,}

按照閉區間集合

>=X

X 是一個正整數。前面的模式 n 連續出現至少 X 次時匹配。

例如,/a{2,}/ 不匹配 "candy" 中的 "a",但是匹配 "caandy" 和 "caaaaaaandy." 中所有的 "a"。

n{X,Y} >=X,<=Y

X 和 Y 為正整數。前面的模式 n 連續出現至少 X 次,至多 Y 次時匹配。

例如,/a{1,3}/ 不匹配 "cndy",匹配 "candy," 中的 "a","caandy," 中的兩個 "a",匹配 "caaaaaaandy" 中的前面三個 "a"。註意,當匹配 "caaaaaaandy" 時,即使原始字符串擁有更多的 "a",匹配項也是 "aaa"。

n$ 以n結尾 匹配任何結尾為 n 的字符串。
^n 以n開頭 匹配任何開頭為 n 的字符串。
?=n 匹配任何其後緊接指定字符串 n 的字符串。
?!n 匹配任何其後沒有緊接指定字符串 n 的字符串。

4.2、元字符

  (Metacharacter)是擁有特殊含義的字符:

元字符等同於描述
. 查找單個字符,除了換行和行結束符。
\w [a-zA-Z0-9] 查找單詞字符。
\W [^a-zA-Z0-9] 查找非單詞字符。
\d [0-9] 查找數字。
\D [^0-9] 查找非數字字符。
\s \n\r\t\f\x0B 查找空白字符。
\S ^\n\r\t\f\x0B 查找非空白字符。
\b 匹配單詞邊界。
\B 匹配非單詞邊界。
\0 查找 NULL 字符。
\n 查找換行符。
\f 查找換頁符。
\r 查找回車符。
\t 查找制表符。
\v 查找垂直制表符。
\xxx 查找以八進制數 xxx 規定的字符。
\xdd 查找以十六進制數 dd 規定的字符。
\uxxxx 查找以十六進制數 xxxx 規定的 Unicode 字符。

4.3、括號的一些用法

表達式理解描述
[abc] =a,=b,=c 查找方括號之間的任何字符。
[^abc] 查找任何不在方括號之間的字符。
[0-9] 從 0 至 9 的數字 查找任何從 0 至 9 的數字。
[a-z] 查找任何從小寫 a 到小寫 z 的字符。
[A-Z] 查找任何從大寫 A 到大寫 Z 的字符。
[A-z] 查找任何從大寫 A 到小寫 z 的字符。
[adgk] 查找給定集合內的任何字符。
[^adgk] 查找給定集合外的任何字符。
(red|blue|green)

=red,=blue,green

包含其中的一個單詞

查找任何指定的選項。

五、正則表達式使用

5.1、使用-RegExp對象

5.1.1、語法

var patt=new RegExp(pattern,modifiers);

或者更簡單的方式:

var patt=/pattern/modifiers;
  • pattern(模式) 描述了表達式的模式
  • modifiers(修飾符) 用於指定全局匹配、區分大小寫的匹配和多行匹配

註意:當使用構造函數創造正則對象時,需要常規的字符轉義規則(在前面加反斜杠 \)。比如,以下是等價的:

var re = new RegExp("\\w+");
var re = /\w+/;

RegExp屬性

屬性描述
constructor 返回一個函數,該函數是一個創建 RegExp 對象的原型。
global 判斷是否設置了 "g" 修飾符
ignoreCase 判斷是否設置了 "i" 修飾符
lastIndex 用於規定下次匹配的起始位置
multiline 判斷是否設置了 "m" 修飾符
source 返回正則表達式的匹配模式

5.1.2、方法使用

方法描述
compile 在 1.5 版本中已廢棄。 編譯正則表達式。
exec 檢索字符串中指定的值。返回找到的值,並確定其位置。
test 檢索字符串中指定的值。返回 true 或 false。
toString 返回正則表達式的字符串。

1、exec() 方法用於檢索字符串中的正則表達式的匹配。

如果字符串中有匹配的值返回該匹配值,否則返回 null。

  var str="Hello world!";
  //查找"Hello"
  var patt=/Hello/g;
  var result=patt.exec(str);
  console.log("返回值: " +  result); //Hello
  //查找 "RUNOOB"
  patt=/RUNOOB/g;
  result=patt.exec(str);
  console.log("<br>返回值: " +  result);//null

2、test() 方法用於檢測一個字符串是否匹配某個模式.

如果字符串中有匹配的值返回 true ,否則返回 false。

  var str="Hello world!";
  //查找"Hello"
  var patt=/Hello/g;
  var result=patt.test(str);
  console.log("返回值: " +  result); //true
  //查找 "Runoob"
  patt=/Runoob/g;
  result=patt.test(str);
  console.log("<br>返回值: " +  result);//false

5.2、使用字符串方法

方法描述
search 檢索與正則表達式相匹配的值。
match 找到一個或多個正則表達式的匹配。
replace 替換與正則表達式匹配的子串。
split 把字符串分割為字符串數組。

search() 方法 用於檢索字符串中指定的子字符串,或檢索與正則表達式相匹配的子字符串,並返回子串的起始位置。

replace() 方法 用於在字符串中用一些字符替換另一些字符,或替換一個與正則表達式匹配的子串。

5.2.1、search 搜索返回索引

  search內支持使用正則表達式和字符串

1、search內使用正則表達式

  var str = "Visit Runoob!"; 
  var n = str.search(/Runoob/i);//使用正則表達式搜索 "Runoob" 字符串,且不區分大小寫
  console.log(n)// 輸出 6

2、search內使用字符串

  var str = "Visit Runoob!"; 
  var n = str.search(‘Runoob‘);//可使用字符串作為參數。字符串參數會轉換為正則表達式,區分大小寫
  console.log(n)// 輸出 6 如果上述改成小寫,輸出-1 沒找到

5.2.2、replace 替換

1、replace內使用正則

  var str = ‘microsoft is microsoft‘; 
  var txt = str.replace(/microsoft/i,"Runoob");//使用正則表達式且不區分大小寫將字符串中的 Microsoft 替換為 Runoob
  console.log(txt)// 輸出 Runoob is microsoft ,只替換了第一個,若果需要全部 增加修飾符 g

2、replace內使用字符串

  var str = ‘microsoft is microsoft‘;  
  var txt = str.replace("microsoft","Runoob");
  console.log(txt)// 輸出 Runoob is microsoft ,只替換了第一個,區分大小寫

5.2.3、match 找到返回數組

符串內檢索指定的值,或找到一個或多個正則表達式的匹配。

  var str="The rain in SPAIN stays mainly in the plain"; 
  var n=str.match(/ain/g);
  console.log(n)//["ain", "ain", "ain"]

返回值:存放匹配結果的數組。該數組的內容依賴於 regexp 是否具有全局標誌 g。 如果沒找到匹配結果返回 null

反倒是

008-js中的正則表達式