參考文件MDN
建立RegExp物件
方法一:用前後各一個 / 包住字串或特殊字元符,載入效能相對較佳
var regex_obj = /usa+da/
方法二:new RegExp(),適合動態產生對應的判定之場合
var regex_obj = new RegExp('usa+da')
特殊字元
反斜線 \
1. 放在非特殊字元前後可作為block(間隔、空白)
console.log(/\bter\b/.test("interest")); //false console.log(/\bter\b/.test("in ter est")); //true
2. 放在特殊字元前則將特殊字元轉換成一般符性質
console.log(/aaaa*/g.test("caaady")); //true console.log(/a\*/.test("caaady")); //false 乃找出是否包含"a*"
3. 要打出1個反斜線的話,需\\,JavaScript內也是
console.log(">\\ \\<"); //輸出 >\ \< console.log(/[\\][\\]/.test(">\\ \\<")); //false console.log(/[\\]/.test(">\\ \\<")); //true
插入符(Caret) ^
匹配輸入的開頭,放匹配字元前
注意:若是插入符在方括號內(字元集),則有不同意思!表示[]中寫入的字元將被否定,匹配非出現在bracket中的符號
console.log(/^U/.test("usada")); //false console.log(/^U/.test("Usada")); //true
金錢符(Dollar Sign) $
匹配輸入的結尾,放匹配字元後
console.log(/o$/.test("Usada pekora")); //false console.log(/o$/.test("Usada Peko")); //true
乘號 *
匹配前一字元0次到多次
console.log(/pekopekope*/.test("pekopeeee")); //false,沒有先符合"pekopeko" console.log(/pekopekope*/.test("pekopekopeeee")); //true
加號 +
乘號的兄弟,匹配前一字元1次以上,等同於{1,}
console.log(/peko+/.test("pekopeeee")); //true console.log(/peko+/.test("peeeekoooooo")); //false ,缺少"pek"
問號 ?
匹配前一字元0~1次,等同於{0,1}
console.log(/p?eko?/.test("pe kooo")); //false 缺少"ek" console.log(/p?eko?/.test("Seky")); //true console.log(/p?eko?/.test("SleepSekyoon")); //true
小數點 .
匹配除了換行符號之外的單一字元
console.log(/.ko/.test("Usada Pekora")); //true console.log(/.ko/.test("kono Suba")); //false "ko"前面缺少換行符號外的任一單一字元
小括號 ( ) Capturing Parentheses
匹配()內字元並記住此次匹配,說明範例直接copy CDN
/(foo) (bar) \1 \2/ 中的 (foo) 與 (bar) 可匹配了 "foo bar foo bar" 這段文字中的前兩個字,而 \1 與 \2 則匹配了後面的兩個字。
注意, \1, \2, ..., \n 代表的就是前面的pattern,以本範例來說,/(foo) (bar) \1 \2/ 等同於 /(foo) (bar) (foo) (bar)/。
中括號/方括號 [ ]
字元的集合,小數點與乘號在[ ]中不具特殊意義,會匹配[ ]內所有出現的字元
console.log(/[p]/.test("Usada Pekora")); //false,沒有小p console.log(/[pk]/.test("Usada Pekora")); //true,至少有"k"
預設定[ ]內字元範圍的集合,可使用減號" - ",如MDN說明範例
[^abc]可以寫作[^a-c]. "brisket" 中找到 'r' 、"chop."中找到 'h'
大括號/花括號 { }
第一種:{n}
規定符號確切發生為n次
console.log(/(peko){2}/.test("pekopekopeko")); //true console.log(/(peko){2}/.test("pekopeeeee")); //false
第二種:{n,m}
規定符號至少發生n次且至多發生m次,m不可為零
console.log(/(peko){1,2}/.test("pekopeeeee")); //true console.log(/(peko){1,2}/.test("peeeeeko")); //false console.log(/(peko){0,2}/.test("peeeeeko")); //true
棒棒符(我不知它叫啥..) |
"or"的意思,x|y表示符合x或y
console.log(/p|P/.test("pekopekopeko")); //true console.log(/p|P/.test("qoo")); //false
反斜線之各種吻合判定
\b:吻合文字邊界
\B:吻合非文字邊界
\d:吻合數字,等同[0-9]
\D:吻合非數字,等同[^0-9]
\s:吻合單一空白字符(空白、tab、跳頁字元等),等效於這一串[ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
\S:吻合非空白字符的其他單一字元(跟\s相反的意思)
\w:吻合字母與底線,等同[A-Za-z0-9_]
\W:吻合非字(non-word)字元,[^A-Za-z0-9_]
\正整數:前面小括號提到的,會refer to 前方第n個小括號內的匹配
\0:吻合NULL(U+0000)字符
後續更多應用待補~Ovo