表示式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"]