JS正則表達(dá)式

? 原文地址: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;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 正則表達(dá)式中的特殊字符 '^'號(hào) 匹配輸入的開始。如果多行標(biāo)志被設(shè)置為true,那么也匹配換行符后緊跟的位置。 例...
    angelwgh閱讀 471評(píng)論 0 0
  • 正則表達(dá)式功能: 測(cè)試字符串的某個(gè)模式。例如對(duì)一個(gè)輸入字符串進(jìn)行測(cè)試,看在該字符串是否存在一個(gè)電話號(hào)碼模式或一個(gè)信...
    DecadeHeart閱讀 722評(píng)論 0 1
  • 前言 在H5開發(fā)中,正則表達(dá)式有很多地方都用得到,固整理了正則表達(dá)式的基本規(guī)則,和在JS中如何使用正則表達(dá)式,做了...
    Lucyfa_LLL閱讀 407評(píng)論 0 0
  • 一、匹配符 \:指出接著的字符為特殊字符。 ^:表示匹配的字符必須在最前邊。 $:表示匹配的字符必須在最后邊。 *...
    活叁黃輝馮閱讀 851評(píng)論 0 3
  • 第一部分 基礎(chǔ)知識(shí) 一、正則申明方式 1、構(gòu)造函數(shù)方式 ● 通過 new 構(gòu)造一個(gè)正則表達(dá)式對(duì)象,其中第一個(gè)參數(shù) ...
    _雙眸閱讀 26,977評(píng)論 2 15

友情鏈接更多精彩內(nèi)容