从0开始,学会正则

正则表达式

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

创建正则表达式

使用正则表达式字面量

var regexp = /ab + c/;

调用RegExp对象的构造函数

var regexp = new RegExp("ab + c");
简单模式

使用/abc/这个模式,按顺序匹配一个字符串中的字符

使用特殊字符

正则表达式中的特殊字符(只列出常用)

字符含义
\非特殊字符前的反斜杠,会使这个字符变成一个具有特殊意义的字符,如"\b";反斜杠也可以使特殊字符变为字面量,如/a\/ ,从而匹配"a"这样的字符串
^匹配输入的开始,如 /^A/匹配"An E"中的A
$匹配输入的结束,如,/t$/ 并不会匹配 “eater” 中的 ‘t’,但是会匹配 “eat” 中的 ‘t’
*匹配前一个表达式0次或多次。等价于 {0,},如,/bo*/会匹配 “A ghost boooooed” 中的 ‘booooo’ 和 “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’;如果紧跟在任何量词 *、 +、? 或 {} 的后面,将会使量词变为非贪婪的(匹配尽量少的字符),如,对 “123abc” 应用 /\d+/ 将会返回 “123”,如果使用 /\d+?/,那么就只会匹配到 “1”
.(小数点)匹配除换行符之外的任何单个字符,如,/.n/将会匹配 “nay, an apple is on the tree” 中的 ‘an’ 和 ‘on’,但是不会匹配 ‘nay’
x|y匹配‘x’或者‘y’,如,/green
{n}n 是一个正整数,匹配了前面一个字符刚好出现了 n 次。
比如, /a{2}/ 不会匹配“candy”中的’a’,但是会匹配“caandy”中所有的 a,以及“caaandy”中的前两个’a’
{n,}n是一个正整数,匹配前一个字符至少出现了n次。例如, /a{2,}/ 匹配 “aa”, “aaaa” 和 “aaaaa” 但是不匹配 “a”
{n, m}n 和 m 都是整数。匹配前面的字符至少n次,最多m次。如果 n 或者 m 的值是0, 这个值被忽略。例如,/a{1, 3}/ 并不匹配“cndy”中的任意字符,匹配“candy”中的a,匹配“caandy”中的前两个a,也匹配“caaaaaaandy”中的前三个a。注意,当匹配”caaaaaaandy“时,匹配的值是“aaa”,即使原始的字符串中有更多的a
[xyz]一个字符集合。匹配方括号中的任意字符,包括转义序列,[abcd]和[a-d]是一样的,[a-d].test(“c”) === true;/[a-z.]+/ 和/[\w.]+/与字符串“test.i.ng”匹配
[^xyz]一个反向字符集。也就是说, 它匹配任何没有包含在方括号中的字符。你可以使用破折号(-)来指定一个字符范围,如:“abcdttt”.replace(/[^abc]/, “efg”)
[\b]匹配一个退格(U+0008)
\b匹配一个词的边界;/\bm/匹配“moon”中的‘m’;/oo\b/并不匹配"moon"中的’oo’,因为’oo’被一个“字”字符’n’紧跟着;/oon\b/匹配"moon"中的’oon’
\d匹配一个数字。等价于[0-9]
\D匹配一个非数字字符。等价于[^0-9]
\f匹配一个换页符
\n匹配一个换行符
\r匹配一个回车符
\s匹配一个空白字符,包括空格、制表符、换页符和换行符,如, /\s\w*/ 匹配"foo bar."中的’ bar’
\S匹配一个非空白字符,如,/\S\w*/ 匹配"foo bar."中的’foo’
\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个子捕获匹配的子字符串(捕获的数目以左括号计数),如 /apple(,)\sorange\1/ 匹配"apple, orange, cherry, peach."中的’apple, orange,’

如果需要从字面上使用任何特殊字符(例如,实际搜索“”,则必须通过在其前面放置反斜杠来对其进行转义。例如,要搜索“a”后跟“”,后跟“b”,您可以使用/a*b/-反斜杠“转义”the“*”,使其成为文本而不是特殊的。

同样,如果编写的是正则表达式文本,并且需要匹配斜杠(“/”),则需要转义它(否则,它将终止模式)。例如,要搜索后面跟有一个或多个字母字符的字符串“/example/”,您可以使用//example/[a-z]+/i-每个斜杠前面的反斜杠将其变为文字。
要匹配字面反斜杠,需要转义反斜杠。例如,为了匹配字符串“c:\”,其中“c”可以是任何字母,您可以使用/[a-z]://-第一个反斜杠将其后面的一个转义,因此表达式将搜索单个文字反斜杠。

如果将regexp构造函数与字符串文字一起使用,请记住反斜杠是字符串文字中的转义,因此要在正则表达式中使用它,需要在字符串文字级别对其进行转义。/a *b/和new regexp(“a \b”)创建相同的表达式,该表达式搜索“a”,后跟文字“”,后跟“b”。

使用正则表达式方法
方法描述
execRegexp.exec(“string”) return [] || null
testRegexp.test(“string”) return true || false
matchstring.match(Regexp) return [] || null
matchAll一个在字符串中执行查找所有匹配的String方法,它返回一个迭代器(iterator)
search一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在匹配不到,失败时返回-1
replace一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串
split一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的 String 方法
使用括号的子字符串匹配

一个正则表达式模式使用括号,将导致相应的子匹配被记住。例如,/a(b)c /可以匹配字符串“abc”,并且记得“b”。回调这些括号中匹配的子串,使用数组元素[1],……[n]。
使用括号匹配的子字符串的数量是无限的。返回的数组中保存所有被发现的子匹配。

var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1"); // $ 1,$ 2表示第一个和第二个括号的子字符串匹配
console.log(newstr); // "Sohn Jmith"
通过标志进行高级搜索

正则表达式有四个可选参数进行全局和不分大小写搜索。这些参数既可以单独使用也可以一起使用在任何顺序和包含正则表达式的部分中

标志描述
g全局搜索
i不区分大小写
var re = /\w+\s/g;
var str = "fee fi fo fum";
var myArray = str.match(re);
console.log(myArray);

正则学起来很累,记不住,需要的时候再查询吧~~~

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值