JS学习记录(二)

正则表达式

正则表达式是用来匹配字符串中的字符组合的模式。

创建正则表达式有以下两种方式:

使用正则表达式字面量,如:

Var re = /ab/;

调用RegExp对象的构造函数,如:

var re = new RegExp("ab+c");

RegExp第二个参数flags为可选参数,flags的值可为i,g,m中的其中一个或者多个的组合。g(global)是全局标志。如果设置了这个标志,对某个文本执行搜索和替换操作时,将对文本中所有匹配的部分起作用。如果不设置这个标志,则仅搜索和替换最早匹配的内容。i(ignoreCase)是忽略大小写标志。如果设置了这个标志,进行匹配比较时,将忽略大小写。m(multiLine)是多行标志。如果不设置这个标志,那么元字符“^”只与整个被搜索字符串的开始位置相匹配,而元字符“$”只与被搜索字符串的结束位置相匹配。如果设置了这个标志,“^”还可以与被搜索字符串中的“\n”或“\r”之后的位置(即下一行的行首)相匹配,而“$”还可以与被搜索字符串中的“\n”或“\r”之后的位置(即下一行的行尾)相匹配。

1、简单模式

        简单的模式是有你找到的直接匹配所构成的。比如,/abc/这个模式就匹配了在一个字符串中,仅仅字符'abc'同时出现并按照这个顺序  

2、使用特殊字符

字符

含义

\

\在字符串里面是一个转义字符。用于将一些特殊字符进行转义。

^

匹配输入的开始。如果多行标示被设置为true,同时匹配换行后紧跟的字符。

比如,/^A/并不会匹配/^A/中的‘A’,但是会匹配“An E”中的‘A’

当这个字符出现在一个字符集合模式的第一个字符的时候,它将会有不同的意义。

比如,/[^a-z\s]/会匹配“my 3 sisters”中的‘3’,即当^出现在字符集合模式时,代表以该字符集合中的字符为

开头(字符集的里面的字符可以出现0次或多次),返回的时开头字符之后的第一个字符。如果/[^a-z\s]+/则返回

开头后的字符一直到再出现[a-z\s]字符集中的字符为止(或者字符串结束为止)

$

匹配输入的结束,如果多行标示被设置为true,同时会匹配换行前紧跟的字符。

比如,/t$/并不会匹配“eater”中的‘t’,但是会匹配“eat”中的。

*

匹配前一个字符0次或者是多次。

比如,/bo*/会匹配“A ghost boooooed”中的'boooo'‘A bird warbled’中的‘b’

但是在“A goat grunted”中将不会匹配任何东西。

+

匹配前面一个字符1次或者多次,和{1,}有相同的效果。

如,/a+/匹配了在“candy”中的a,和在"caaaaaaandy"中所有的a

?

匹配前面一个字符0次或者1次,和{0,1}有相同的效果。

比如,/e?le?/匹配“angel”中的‘el’,和"angle"中的‘le’以及“oslo”中的'l'

如果'?'紧跟在在任何量词*, + , ?,或者是{}的后面,将会使量词变成非贪婪模式(匹配最少的次数),

和默认的贪婪模式(匹配最多的次数)正好相反。

比如,使用/\d+/非全局的匹配“123abc”将会返回“123”,如果使用/\d+?/,那么久只会匹配到“1”

同时运用在向前断言,在本表的x(?=y)x(?!y)中有描述。

.

(The decimal point) matches any single character except the newline character.

(小数点)匹配任何除了新一行字符的任何单个字符。

比如,/.n/将会匹配‘nay, an apple is on the tree’中的‘an’‘on’,但是不会匹配'nay'

(x)

匹配‘x’并且记住匹配项。这个被叫做捕获括号。

比如,/(foo)/匹配和记住了“foo bar”中的'foo'。匹配到子字符串可以通过结果数组的[1],...,[n]元素进行访问。

(?:x)

匹配'x'但是不记住匹配项。这种被叫做非捕获括号。匹配到的子字符串不能通过结果数组的[1],...,[n]进行访问。

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’

x|y

匹配‘x’或者‘y’

比如,/green|red/匹配“green apple”中的‘greem’“red apple”中的‘red’

{n}

n是一个正数,匹配了前面一个字符刚好发生了n次。

比如,/a{2}/不会匹配“candy”中的'a',但是会匹配“caandy”中所有的a,“caaandy”中的前两个'a'

{n,m}

匹配前面一个字符nm

[xyz]

字符集,即匹配其中任意一个字符即可

[^xyz]

匹配不包含在该字符集中的其他字符

\b

匹配单词的开始或结束.

比如:/\babc/匹配abcd中的abc,但是不匹配aabc中的abc

\B

匹配不是单词开头或结束的位置.

比如:\/Bbc/B\匹配abcd中的bc,但比匹配abc或者bcd中的bc

\d

匹配数字字符

\D

匹配非数字字符

\f

换页符 (U+000C).

\n

换行符 (U+000A).

\r

回车符 (U+000D).

\s

匹配空格

\S

匹配非空格

\t

制表符 (U+0009).

\v

垂直制表符(U+000B).

\w

匹配数字、字母、下划线

\W

匹配非数字、字母、下划线

\n

n为数字时,表示对第n个匹配结果的引用,如:

 /apple(,)\sorange\1/ 匹配"apple, orange, cherry, peach."中的 'apple, orange,',此处\1表示第

一个匹配结果,即逗号

\0

匹配null


使用正则表达式

正则表达式可以通过RegExp的方法:test和exec和String的方法:match、search、replace、split方法使用。具体如下:

方法

描述

exec

RegExp的方法,用于搜索匹配的字符,返回匹配字符数组。

test

RegExp的方法,用于测试正则表达式是否匹配string中的字符,如果有匹配则返回true,否则返回false

match

String的方法,执行搜索匹配的字符,当有匹配时,返回匹配字符的数组,否则返回null

search

String的方法,返回匹配字符在string中的索引,如无匹配返回-1。如:"saaaaa".search(/a/g)返回1,返回匹配的第一个字符的为止

replace

String的方法,将字符串中匹配的字符替换成要替换的字符

split

String的方法,以字符串以字符或者正则表达式匹配的字符为分割符,将字符串分割为数组

使用括号匹配的字符

1、        正则表达式中使用

/a(b+)c\1/.exec(“abbcbbsdf”),\1表示第一个括号即(b+)的匹配字符,此处为bb

2、        replace中使用

使用美元符号$加数字,如$1表示第一个括号匹配的字符。如:

var re = /(\w+)\s(\w+)/;

var str = "John Smith";

var newstr = str.replace(re, "$2,$1");

console.log(newstr);

//此处$1表示第一个括号匹配的结果即john,$2表示第二个括号里的匹配结果即Smith.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值