? 原文地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions#special-plus
由/ /定義,稱為模式
常見正則表達(dá)式
郵箱:/\w+@['gmile','163','136','126','qq'.'135']?\w*\.com/gi
用法
const text="I'm ok!"
const regexp=/^o/
text.match(regexp)
regexp.exec(text)
let?ripe_oranges?=?oranges.filter(fruit?=>?fruit.match(/(?<=ripe?)orange/));
console.log(ripe_oranges);?//?[?'ripe?orange?A?',?'ripe?orange?C'?]
1.斷言
^????開始????例如,/^A/?并不會(huì)匹配 "an A" 中的 'A',但是會(huì)匹配 "An E" 中的 'A'。
$????結(jié)束?????例如,/t$/?并不會(huì)匹配 "eater" 中的 't',但是會(huì)匹配 "eat" 中的 't'。
\b? ? 匹配臨界? ?/oo\b/? ?not 'moon' but 'moo'
\B? ? 匹配非臨界 /oo\B/? not 'moo' but 'moon'
x(?=y)? only 'xy'? output'o' not? 'xoy'
x(?!y)? only 'x\w+y'? ?'x'
(?<=y)x????x
(?<!y)x? ? x
2.字符表
*????匹配前一個(gè)表達(dá)式 0 次或多次。等價(jià)于?{0,}。????例如,/bo*/會(huì)匹配 "A ghost boooooed" 中的 'booooo' 和 "A? ? ? ? ? ? bird warbled" 中的 'b',但是在 "A goat grunted" 中不會(huì)匹配任何內(nèi)容。
+????匹配前面一個(gè)表達(dá)式 1 次或者多次。等價(jià)于?{1,}????例如,/a+/會(huì)匹配?"candy" 中的 'a' 和?"caaaaaaandy" 中所? ? ? ? ? 有的 'a',但是在 "cndy" 中不會(huì)匹配任何內(nèi)容
?????匹配前面一個(gè)表達(dá)式 0 次或者 1 次。等價(jià)于?{0,1}????例如,/e?le?/?匹配 "angel" 中的 'el'、"angle" 中的 'le' 以及 "oslo' 中的 'l'。
如果緊跟在任何量詞 *、 +、? 或 {} 的后面,將會(huì)使量詞變?yōu)?b>非貪婪(匹配盡量少的字符),和缺省使用的貪婪模式(匹配盡可能多的字符)正好相反。例如,對(duì) "123abc" 使用?/\d+/將會(huì)匹配?"123",而使用?/\d+?/則只會(huì)匹配到 "1"。
還用于先行斷言中,如本表的?x(?=y)?和?x(?!y)?條目所述。
.????(小數(shù)點(diǎn))默認(rèn)匹配除換行符之外的任何單個(gè)字符。
例如,/.n/?將會(huì)匹配 "nay, an apple is on the tree" 中的 'an' 和 'on',但是不會(huì)匹配 'nay'。
如果?s("dotAll") 標(biāo)志位被設(shè)為 true,它也會(huì)匹配換行符。
(foo)? ? 后來會(huì)被記住? ? 例如/(foo)(bar) \1 \2/匹配中"\1"代表(foo)?
(?:x)? ? ? ??匹配 'x' 但是不記住匹配項(xiàng)。這種括號(hào)叫作非捕獲括號(hào),使得你能夠定義與正則表達(dá)式運(yùn)算符一起使用的子表達(dá)式。看看這個(gè)例子?/(?:foo){1,2}/。如果表達(dá)式是?/foo{1,2}/,{1,2}將只應(yīng)用于?'foo'?的最后一個(gè)字符 'o'。如果使用非捕獲括號(hào),則?{1,2}?會(huì)應(yīng)用于整個(gè) 'foo'?單詞。
x|y????匹配‘x’或者‘y’????例如,/green|red/匹配“green apple”中的‘green’和“red apple”中的‘red’
{n}????n 是一個(gè)正整數(shù),匹配了前面一個(gè)字符剛好出現(xiàn)了 n 次。
????????比如, /a{2}/ 不會(huì)匹配“candy”中的'a',但是會(huì)匹配“caandy”中所有的 a,以及“caaandy”中的前兩個(gè)'a'
{n,}????n是一個(gè)正整數(shù),匹配前一個(gè)字符至少出現(xiàn)了n次。
????????????例如, /a{2,}/ 匹配 "aa", "aaaa" 和?"aaaaa" 但是不匹配?"a"。
{n,m}????n到m個(gè)
[xyz]? ? ? ?x,y,z任意一個(gè)
[\b]????匹配一個(gè)退格
\cX????當(dāng)X是處于A到Z之間的字符的時(shí)候,匹配字符串中的一個(gè)控制符。
????????例如,/\cM/?匹配字符串中的 control-M (U+000D)。
\d? ? 等價(jià)于[0-9]
\D? ? 取\d的非
\f? ? 換頁符
\n? ? 換行符????
\r? ? 回車符
\s? ??
????匹配一個(gè)空白字符,包括空格、制表符、換頁符和換行符。等價(jià)于[ \f\n\r\t\v\u00a0\u1680\u180e\u2000-? ? ? ? ? ? ? ? \u200a\u2028\u2029\u202f\u205f\u3000\ufeff]。
????例如,?/\s\w*/?匹配"foo bar."中的' bar'。
\S? ? 取\s的非
\w????匹配一個(gè)非單字字符。等價(jià)于?[^A-Za-z0-9_]。
????????例如,?/\W/?或者?/[^A-Za-z0-9_]/?匹配 "50%." 中的 '%'。
\W? ? \w取非
\num? ? num代表一個(gè)正整數(shù),在正則表達(dá)式中,它返回最后的第num個(gè)子捕獲匹配的子字符串(捕獲的數(shù)目以左括? ? ? ? ? ? ? 號(hào)計(jì)數(shù))。
????????????比如?/apple(,)\sorange\1/?匹配"apple, orange, cherry, peach."中的'apple, orange,' 。
\0? ? 匹配null字符
\xhh????與代碼 hh 匹配字符(兩個(gè)十六進(jìn)制數(shù)字)
\uhhhh????與代碼 hhhh 匹配字符(四個(gè)十六進(jìn)制數(shù)字)。
\u{hhhh}????(僅當(dāng)設(shè)置了u標(biāo)志時(shí))使用 Unicode 值 hhhh 匹配字符(十六進(jìn)制數(shù)字)。
3.方法:
exec一個(gè)在字符串中執(zhí)行查找匹配的RegExp方法,它返回一個(gè)數(shù)組(未匹配到則返回 null)。
test一個(gè)在字符串中測(cè)試是否匹配的RegExp方法,它返回 true 或 false。
match一個(gè)在字符串中執(zhí)行查找匹配的String方法,它返回一個(gè)數(shù)組,在未匹配到時(shí)會(huì)返回 null。
matchAll一個(gè)在字符串中執(zhí)行查找所有匹配的String方法,它返回一個(gè)迭代器(iterator)。
search一個(gè)在字符串中測(cè)試匹配的String方法,它返回匹配到的位置索引,或者在失敗時(shí)返回-1。
replace一個(gè)在字符串中執(zhí)行查找匹配的String方法,并且使用替換字符串替換掉匹配到的子字符串。
split一個(gè)使用正則表達(dá)式或者一個(gè)固定字符串分隔一個(gè)字符串,并將分隔后的子字符串存儲(chǔ)到數(shù)組中的?String?方法。
str.replace(a,b)? ? 將a替換為b? ?
例如:
var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1");
console.log(newstr);
這個(gè)表達(dá)式輸出 "Smith, John"
4.通過標(biāo)志進(jìn)行高級(jí)搜索
g? ? 全局搜索
i? ? 不區(qū)分大小寫搜索
m? ? 多行搜索
s? ? 允許.匹配換行符
u? ? 利用unicode碼的模式進(jìn)行匹配
y? ? 執(zhí)行粘貼搜索?匹配從目標(biāo)字符串的當(dāng)前位置開始,可以使用y標(biāo)志。
用法: let re=/\w+\s/g;