表示式var pattern = new RegExp(s$) or var pattern =/s$/ 代表著以s結尾的字串都匹配。
透過 \ (backslash) 開頭來表示轉義序列
| 字元 | 匹配 |
|---|---|
| \0 | NUL字元 |
| \t | tab |
| \n | new line |
| \v | vertical tab |
| \uxxx | 16進制unicode字元 |
| \cX | 控制字元 |
^ $ . * + ? = ! : | \ / ( ) [ ] { } 都具有特殊意義
需要用到標點符號的時候可以前面加 \。
把個別的字元放在中誇號內,一個中括號僅驗證匹配一個字元。/[abc]/: 匹配a、b、c任一個字母即可。/[^abc]/: 表示a、b、c以外的任何字元,^為否定字元。/[a-c]/: 表示匹配a、b、c任一個字母即可,-為連號字元。/[a-zA-Z0-9]/: 表示任何字母數字都匹配。/[\s\d]/: 表示任何空白字元數字。
| 字元 | 匹配 |
|---|---|
| [...] | 中括號內任一字元 |
| [^...] | 中括號內字元之外的字元 |
| . | 除了newline or其他unicode行終止符號之外的任何字元 |
| \w | 等同[a-zA-Z0-9],任何字母數字 |
| \W | 等同[^a-zA-Z0-9],ASCII任何字元之外 |
| \s | 任何unicode空白字元 |
| \S | 任何unicode空白字元之外的字元,與 \W不同 |
| \d | 等同[0-9],任何數字 |
| \D | 等同[^0-9],任何數字之外的字元 |
| [\b] | 一個字面上的倒退字元 |
可以使用/\d\d/代表兩位數字。但無法敘述。/\d{2,4}/: 表示匹配2~4個數字。/\w{3}\d?: 表示匹配三個文字然後接一個0~9的數字或不接任何東西(表示數字可有可無)。/\s+javascript\s+/: 表示匹配javascript前後都接一個或多個空白字元。/[^(]*/: 表示匹配不為左括號0個或多個字元。
| 字元 | 匹配 |
|---|---|
| {n,m} | 匹配前一個項目重複至少n次且不多於m次 |
| {n,} | 匹配前一個項目重複至少n次或更多 |
| {n} | 匹配前一個項目重複符合n次 |
| ? | 等同於{0,1},匹配前一個項目出現1次或0次(表示前一個項目非必須) |
| + | 等同{1,},,匹配前一個項目出現1次或多次 |
| * | 等同{0,},,匹配前一個項目出現0次或多次 |
/ab|12|AB/: 匹配ab或12或AB任一個字串即可。/(ab|12)+|xy/: (ab或12字串出現過至少一次)或xy字串。(\d+)([a-z])\1: 至少一個的數字後面接a~z的字母然後最後面跟第一個分組一樣(至少一個的數字)。/['"][^'"]*\1/ : 引號要前後符合。
| 字元 | 匹配 |
|---|---|
| | | 擇一匹配,先匹配左邊若不匹配,則匹配右邊 |
| (...) | 分組,將項目組成一個單元,使可套用* + ? |,記住分組可當作後面的參考 |
| (?:...) | 將項目組成一個單元,但不記住匹配分組字元 |
| \n | 匹配編號為第n個分組,但(?:不計入分組 |
/^Jackson$/: 表示匹配J開頭n結尾,中間接ackso字串。/\bJackson\b/: 表示匹配Jackson字串。
\sApple\s: 取得Apple的單字,但此方式會有兩個問題
解決的分式透過\b,
/\bApple\b/
/([Aa]pple)?(?=\:)/: 取得Apple or apple且後面接:的字串,若字串為Apple: is a fruit,匹配的字串會是Apple,若字串為Apple is a fruit,不會有任何匹配。
| 字元 | 匹配 |
|---|---|
| ^ | 匹配字串開頭,在多行時,代表每一行的開頭 |
| $ | 匹配字串結尾,在多行時,代表每一行的結尾 |
| \b | 匹配文字邊界,(與[\b]用法不同) |
| \B | 匹配不是文字邊界的位置 |
| (?=p) | 要求後面的字元必須匹配p(回傳時不包含p字元) |
| (?!p) | 要求後面的字元不匹配p |
/javascript$/im: 字串javascript與javascript\nis fun都匹配。/\bjavascript\b/i: 不區分大小寫javascript的比對。/\bjavascript\b/gi: 不區分大小寫javascript的比對且找出所有出現的地方。
| 字元 | 匹配 |
|---|---|
| i | 不區分大小寫比對 |
| g | 執行全域比對 |
| m | 多行模式,^比對每行或字串開頭,$比對每行或字串結尾 |
var str="javascript";
str.search('/script/i'); // return 4
var str="javascript javascript";
var regExp= /javascript/ // 不能寫成var regExp= "/javascript/"
// 僅會置換第一個匹配的字串
str.replace(regExp,'JavaScript') // return "JavaScript javascript"
var regExp_g = /javascript/gi;
// 所有javascript都替換成JavaScript
str.replace(regExp_g,'JavaScript') // return "JavaScript JavaScript"
var regExp_q = /(java)(script)/g
// $1:紀錄()第一組的字串當置換字串
str.replace(regExp_g,'"$1"') // return ""java" "java""
var str= '1 plus 2 equals 3'
var regExp_g = /\d+/g
str.match(regExp_g); // return ["1", "2", "3"]
// 沒有g旗標時
var regExp = /\d+/
str.match(regExp);
// return ["1", index: 0, input: "1 plus 2 equals 3", groups: undefined]
var str = '1, 2, 3, 4, 5';
str.split(/s*,s*/); //return ["1","2","3","4","5"]