正则表达式

正则表达式是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象。这些模式被用于 RegExp 的 exec 和 test 方法,以及 String 的 matchreplacesearch 和 split 方法。本章介绍 JavaScript正则表达式。

 

语法:

/pattern/flags  

/正则表达式主体/修饰符(可选) -- 正则表达式字面量

或者使用 new RegExp(pattern [, flags])

修饰符(flags:

i

执行对大小写不敏感的匹配

g

执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)

m

执行多行匹配

 

模式表达式:

[abc]

等价[a-c]查找方括号之间的任何字符。要匹配 [,请使用 \[

[0-9]

查找任何从 0 9的数字。

[^xyz]

一个反向字符集。也就是说, 它匹配任何没有包含在方括号中的字符。你可以使用破折号(-)来指定一个字符范围。任何普通字符在这里都是起作用的。

例如,[^abc] 和 [^a-c] 是一样的。他们匹配"brisket"中得‘r’,也匹配“chop”中的‘h’。

[\b]

匹配一个退格(U+0008)。(不要和\b混淆了。)

(x)

括号内表示子表达式的开始和结束位置。x是子表达式,相应的子匹配被记住,用作以后引用使用。要匹配括号,使用\(\)

括号的作用:

  1. 匹配 'x' 并且记住匹配项,在检索到的陪配中抽取括号中的匹配。回调这些括号中匹配的子串,使用数组元素[1],……[n]
  2. 允许在同一正则表达式的后部引用前面的子表达式。通过字符“\”后加一位或多位数字实现,如\1\2表示带圆括号的子表达式在正则表达式中的位置(左括号位置)。如要匹配左侧引号:/(['"])[^'"]*\1/
  3. 模式 /(foo) (bar) \1 \2/ 中的 '(foo)' 和 '(bar)' 匹配并记住字符串 "foo bar foo bar" 中前两个单词。模式中的 \1 和 \2 匹配字符串的后两个单词。注意 \1、\2、\n 是用在正则表达式的匹配环节。在正则表达式的替换环节,则要使用像 $1、$2、$n 这样的语法,例如,'bar foo'.replace( /(...) (...)/, '$2 $1' )。

(?:x)

匹配 'x' 但是不记忆匹配项。这种叫作非捕获括号,使得你能够定义为与正则表达式运算符一起使用的子表达式。来看示例表达式 /(?:foo){1,2}/。如果表达式是 /foo{1,2}/,{1,2}将只对 ‘foo’ 的最后一个字符 ’o‘ 生效。如果使用非捕获括号,则{1,2}会匹配整个 ‘foo’ 单词。

x(?=y)

匹配'x'仅仅当'x'后面跟着'y'.这种叫做正向肯定查找。

例如,/Jack(?=Sprat)/会匹配到'Jack'仅仅当它后面跟着'Sprat'。/Jack(?=Sprat|Frost)/匹配‘Jack’仅仅当它后面跟着'Sprat'或者是‘Frost’。但是‘Sprat’和‘Frost’都不是匹配结果的一部分。

x(?!y)

匹配'x'仅仅当'x'后面不跟着'y',这个叫做正向否定查找。

例如,/\d+(?!\.)/匹配一个数字仅仅当这个数字后面没有跟小数点的时候。正则表达式/\d+(?!\.)/.exec("3.141")匹配‘141’但是不是‘3.141’

特殊字符:

^

匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^字符本身,请使用 \^

$

匹配输入字符串的结尾位置。如果设置了 RegExp对象的 Multiline属性,则 $也匹配 '\n' '\r'。要匹配 $字符本身,请使用\$

\b

匹配一个字边界,即字与空格间的位置。如:"big right",匹配边界ig而非中间ig,且边界空格在后面,用/ig\b/

\B

非字边界匹配。对于 \B非字边界运算符,位置并不重要,只要是非边界就可以。

?

等价{0,1}匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?

*

等价{0, },匹配前面的子表达式零次或多次。要匹配 *字符,请使用 \*

+

等价{1,},匹配前面的子表达式一次或多次。要匹配 +字符,请使用 \+

{n}

n 是一个非负整数。匹配确定的 n次。

{n, }

n 是一个非负整数。至少匹配n次。

{n, m}

m n 均为非负整数,其中n <= m。最少匹配 n次且最多匹配 m次。

.

匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \.

\

将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n'匹配字符 'n''\n'匹配换行符。序列 '\\'匹配 "\",而 '\('则匹配 "("

|

指明两项之间的一个选择。要匹配 |,请使用 \|

\cX

X是处于AZ之间的字符的时候,匹配字符串中的一个控制符。

例如,/\cM/ 匹配字符串中的 control-M (U+000D)

\d

匹配一个数字。

等价于[0-9]

例如, /\d/ 或者 /[0-9]/ 匹配"B2 is the suite number."中的'2'

\D

匹配一个非数字字符。

等价于[^0-9]

例如, /\D/ 或者 /[^0-9]/ 匹配"B2 is the suite number."中的'B'

\f

匹配一个换页符 (U+000C)

\n

匹配一个换行符 (U+000A)

\r

匹配一个回车符 (U+000D)

\s

匹配一个空白字符,包括空格、制表符、换页符和换行符。

等价于[ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]

例如, /\s\w*/ 匹配"foo bar."中的' bar'

\S

匹配一个非空白字符。

等价于[^ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]

例如, /\S\w*/ 匹配"foo bar."中的'foo'

\t

匹配一个水平制表符 (U+0009)

\v

匹配一个垂直制表符 (U+000B)

\w

匹配一个单字字符(字母、数字或者下划线)。

等价于[A-Za-z0-9_]

例如, /\w/ 匹配 "apple,"中的 'a'"$5.28,"中的 '5' "3D." 中的 '3'

\W

匹配一个非单字字符。

等价于[^A-Za-z0-9_]

例如, /\W/ 或者 /[^A-Za-z0-9_]/ 匹配 "50%."中的 '%'

\n

n是一个正整数,一个返回引用到最后一个与有n插入的正值表达式(counting left parentheses)匹配的副字符串。

比如 /apple(,)\sorange\1/ 匹配"apple, orange, cherry, peach."中的'apple, orange,'

\0

匹配 NULL (U+0000)字符, 不要在这后面跟其它小数,因为 \0<digits> 是一个八进制转义序列。

\xhh

与代码 hh匹配字符(两个十六进制数字)

\uhhhh

与代码 hhhh匹配字符(四个十六进制数字)。

使用正则表达式:

 

方法

描述

exec

一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回null)。

test

一个在字符串中测试是否匹配的RegExp方法,它返回true或false。

match

一个在字符串中执行查找匹配的String方法,它返回一个数组或者在未匹配到时返回null。

search

一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。

replace

一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。

split

一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的String方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值