正则表达式是一种简单的语言语法规范,是一种强大、方便、高效的文本处理工具。在一些方法中使用它来查找、替换和提取字符串中的信息。
:
目录
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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。