,,JavaScript 正则表达式详解

,,JavaScript 正则表达式详解

正则表达式是一种简单的语言语法规范,是一种强大、方便、高效的文本处理工具。在一些方法中使用它来查找、替换和提取字符串中的信息。

:

目录

1.正则表达式创建2。使用模式2.1使用简单模式2.2使用特殊字符3。应用3.1拆分字符串3.2分组3.3贪婪匹配3.4正则表达式标志3.5 test()方法4。普通定期(参考)总结

1. 正则表达式创建

JavaScript可以通过两种方式创建正则表达式:

第一种:直接通过/正则表达式/写出来。

第二:通过新的RegExp(“正则表达式”)创建一个RegExp对象

const re1=/ABC \-001/;

const re2=new RegExp(' ABC \ \-001 ');

re1///ABC\-001/

re2///ABC\-001/

注意,如果使用第二种写法,由于字符串的转义问题,字符串的两个\实际上是一个\。

2. 使用模式

2.1 使用简单模式

简单模式由找到的直接匹配组成。例如,字符串中的模式/abc/matches,只有字符“abc”按此顺序同时出现。嗨,你知道你的abc吗?“最新的飞机设计是从平板飞行器演变而来的。会匹配成功。在上面的两个例子中,子字符串“abc”是匹配的。字符串“Grab crab”将不匹配,因为它不包含任何“abc”子字符串。

2.2 使用特殊字符

例如,模式/abc/匹配单个“a”后跟零个或多个“b”(意味着前一项出现零个或多个)以及后跟“c”的任何字符组合。在字符串的“scbbbbbbcdebc”中,此模式匹配子字符串“abbbbc”。

性格;角色;字母

意义

\

匹配将遵循以下规则:

非特殊字符前的反斜杠表示下一个字符是特殊字符,不能按字面解释。例如,“d”前面不带“”,通常匹配小写的“d”。如果添加了“”,该字符将成为特殊字符,表示要匹配一个数字。

反斜杠也可以将它后面的特殊字符转义成字面量。例如,模式/a/意味着将匹配0个或更多个A。相反,模式/a*/消除了“”的特殊性,因此它可以匹配类似于“a*”的字符串。

在使用new RegExp('pattern ')时,不要忘记对\进行转义,因为\也是字符串中的转义字符。

^

例如,匹配的开头/A/不会匹配' an A '中的' A ',但会匹配' An E '中的' A'。

$

比赛结束。例如,/t$/与' eater '中的' t '不匹配,但它匹配。

*

匹配前一个表达式0次或更多次。相当于{0,}。例如,/bo*/将匹配“一个幽灵发出的声音”中的“声音”

匹配前一个表达式一次或多次。相当于{1,}。例如,/a/匹配“candy”中的“a”和“caaaaaaandy”中的所有“a”。

匹配上一个表达式0或1次。相当于{0,1}。比如/e?乐?/匹配“angel”中的“el”、“angle”中的“le”和“oslo”中的“l”。

如果它跟在任何量词*,或者{},会使量词非贪婪(匹配尽可能少的字符),这与默认的贪婪模式(匹配尽可能多的字符)正好相反。

例如,对“123abc”应用/\ d/将返回“123”。如果用/\d?/,则只匹配“1”。

匹配除换行符以外的任何单个字符。比如说,/。n/将与'不,树上有一个苹果'中的' an '和' on '匹配,但不与' nay '匹配。

x

y

{n}

n是一个正整数,它只匹配前一个字符n次。

例如,/a{2}/不会匹配“candy”中的“A”,但会匹配“caandy”中的所有A和“caandy”中的前两个“A”。

{n,m}

n和m是整数。匹配前面的字符至少n次,最多m次。如果n或m的值为0,则忽略该值。例如,/a{1,3}/不匹配“cndy”中的任何字符,匹配“candy”中的A,匹配“caaaaaandy”中的前两个A,还匹配“caaaaaandy”中的前三个A。请注意,当“caaaaaaandy”匹配时,匹配的值是“aaa”,即使原始字符串中有更多的A。

[xyz]

字符的集合。匹配方括号中的任何字符,包括转义序列。您可以使用破折号(-)来指定字符范围。特殊符号如点(。)和星号(*)在字符集中没有特殊含义。他们不一定要逃避,但是逃避也是管用的。

比如【abcd】和【a-d】是一样的。它们都符合“胸肉”中的“b”和“城市”中的“c”。/[a-z .]/和/[\ w .]/匹配字符串“test.i.ng”。

[^xyz]

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

\b

匹配单词的边界。单词的边界是一个单词后面没有另一个“单词”字符或者前面没有其他“单词”字符的位置。注意,匹配单词的边界不包括在匹配内容中。换句话说,匹配单词的边界的内容长度是0。例如:

/\bm/匹配“月亮”中的“m”;/oo\b/与“moon”中的“oo”不匹配,因为“oo”后面跟有单词字符“n”。/oon\b/匹配“moon”中的“oon ”,因为“oon”是此字符串的结尾。这样他就不会被一句话打断。

\d

匹配一个数字。相当于[0-9]。例如,/\d/或/[0-9]/匹配“B2是套房号”中的“2”

\D

匹配非数字字符。相当于[0-9]。例如,/\D/或/[0-9]/匹配“B2是套房号”中的“b”

\f

匹配一个分页符(U 000C)。

\n

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

\r

匹配回车符(U 000D)。

\s

匹配空白字符,包括空格、制表符、分页符和换行符。相当于[\ f \ n \ r \ t \ v \ u00a 0 \ u 1680 \ u180e \ u 2000-\ u200a \ u 2028 \ u 2029 \ u 202 f \ u205f \ u 3000 \ u efff]。

例如,/\s\w*/匹配“foo bar”中的“bar”。

\S

匹配非空白字符。相当于[\ f \ n \ r \ t \ v \ u00a 0 \ u 1680 \ u180e \ u 2000-\ u200a \ u 2028 \ u 2029 \ u 202 f \ u205f \ u 3000 \ u efff]。

例如,/\S\w*/匹配“foo bar”中的“foo”

\t

匹配水平制表符(U 0009)。

\w

匹配单个单词字符(字母、数字或下划线)。相当于【A-Za-z0-9_】。

例如,/\w/匹配“apple”中的“A”,匹配“3D”中的“5.28美元”、“5”和“3”

\W

匹配非单个单词字符。

\n

在正则表达式中,它返回最后第n个子捕获匹配的子字符串(捕获的数量在左括号中计算)。

3. 应用

3.1 切分字符串

用正则表达式拆分字符串比用固定字符更灵活。通常,拆分代码:

公元二世纪。拆分(“”);//['a ',' d ','','',' c']

上述方法不识别连续空格,而是使用正则表达式:

一个字母b c。拆分(/\ s/);//['a ',' b ',' c']

无论多少空间都可以正常划分。再次添加',':

甲、乙、丙、丁。split(/[\s\,]/);//['a ',' b ',' c ',' d']

再补充;

甲、乙;c d。split(/[\s\,\;] /);//['a ',' b ',' c ',' d']

因此,正则表达式可用于将不规则输入转换为正确的数组。

3.2 分组

正则表达式除了判断是否匹配,还可以提取子串,要提取的组用()表示。例如:

(\ d {4})-(\ d {4,9}) $分别定义两组,可以直接从匹配的字符串中提取区号和本地号码:

var re=/^(\d{4})-(\d{4,9})$/;

re . exec(' 0530-12306 ');//['010-12345', '010', '12345']

re . exec(' 0530 12306 ');//null

匹配成功后,exec()方法返回一个数组,第一个元素是正则表达式匹配的整个字符串,后面的字符串代表匹配成功的子串。

当匹配失败时,exec()方法返回null。

3.3 贪婪匹配

注意,常规匹配默认是贪婪匹配,即匹配尽可能多的字符。如下,匹配数字后的0:

var re=/^(\d)(0 *)$/;

re . exec(' 102300 ');//['102300', '102300', '']

因为\d使用贪婪匹配,直接匹配后面所有的零,结果0*只能匹配空字符串。

您必须让\d使用非贪婪匹配(即尽可能少的匹配)来匹配后面的0,并添加一个?可以让\d采用非贪婪匹配:

var re=/^(\d?)(0*)$/;

re . exec(' 102300 ');//['102300', '1023', '00']

3.4 正则表达式标志

全球搜索。

不区分大小写的搜索。

m线搜索。

y“粘性”搜索被执行,匹配从目标字符串的当前位置开始。您可以使用Y标志。

3.5 test() 方法

test()方法用于检测一个字符串是否匹配特定的模式,如果字符串包含匹配的文本,则返回true,否则返回false。

var re=/^(\d{4})-(\d{4,9})$/;

重新测试(' 0530-12321 ');//真

重新测试(' 0530-123 ab ');//假

重新测试(' 0530 12321 ');//假

4. 常用正则(参考)

验证电子邮件地址:\ w [-。] \ w) * @ \ w ([-。] \ w) * \。w ([-。] \ w) * $

认证ID号(15位或18位):\ d {15} | \ d {18 $

中国大陆手机号码:1 { 10 }

中国大陆固定电话号码:(\d{4}-|\d{3}-)?(\d{8}|\d{7})

中国大陆的邮政编码:[1-9]\d{5}

IP地址:((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

日期(YYY-MM-DD):(\ d { 4 } | \ d { 2 })-((1[0-2])|(0?[1-9]))-(([12][0-9])|(3[01])|(0?[1-9]))

日期(月/日/年):((1[0-2])|(0?[1-9]))/(([12][0-9])|(3[01])|(0?[1-9])/(\ d { 4 } | \ d { 2 })

验证号:[0-9] * $

验证n位的数量:\ d {n} $

验证至少n位数字:\ d {n,} $

验证m-n位的数量:\ d {m,n} $

验证以零和非零开头的数字:(0 | [1-9] [0-9] *) $

验证带1-3位小数的正实数:[0-9](。[0-9] {1,3})?$

验证一个非零正整数:\?[1-9][0-9]*$

验证非零负整数:\-[1-9] [0-9] * $

验证非负整数(正整数0) \ d $

验证非正整数(负整数0) ((-\ d) | (0)) $

验证长度为3的字符:{3} $

验证一串26个英文字母:[A-ZA-Z] $

验证由26个大写英文字母组成的字符串:[A-Z] $

验证由26个小写英文字母组成的字符串:[A-Z] $

验证由数字和26个英文字母组成的字符串:[A-ZA-Z0-9] $

总结

本文到此为止。希望能帮到你,也希望你能多关注我们的更多内容!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: