js正则表达式简介

更新日期: 2022-04-21阅读: 1.2k标签: 正则

正则表达式是我们写代码时经常遇到的,它是一种工具,可以帮我们方便简洁地实现搜索和替换功能。下面介绍一下如何构建一个正则表达式。

正则表达式基本组成可以分为字符和元字符。字符通常就是数字和英文字母,元字符是一些表示特别意义的字符,比如"?"这个字符在正则表达式中表示"匹配0次或1次"。我们利用字符和元字符就能组合成各种规则,从而实现各种模式匹配。


1.定义

创建可以用RegEXp()即new RegExp("s"),但更多是通过直接量语法来创建即包含在一对斜杠(/)之间的字符/s/。

正则表达式的模式规则是由一个字符序列组成的,包括所有字母和数字。大多数的字符都是按照直接量仅描述待匹配的字符的。比如/java/可以匹配任何包含“java”字串的字符串。除此外,还有其他具有特殊语义的字符这些字符并不按照字面含义匹配。比如/s$/包含两个字符,第一个“s”按照字面含义匹配,第二个字符$是一个具有特殊语义的元字符,用以匹配字符串的结束。因此这个正则表达式可以匹配任何以“s”结束的字符串。


2.直接量字符

上面说到正则表达式中所有字母和数字都是按照字面含义进行匹配的。如果要匹配非字母的字符,这些字符需要反斜线(\)作为前缀进行转义。

\o    NUL字符(\u0000)

\t     制表符(|u0009)

\n    换行符(\u000A)

\v    垂直制表符(\u000B)

\f    换页符(\u000C)

\r    回车符(\u000D)

正则表达式中许多标点符号具有特殊含义它们是:^ $ . * + ? = ! : | \/ () [] {}


3.字符类

将直接量字符放进[]内就组成了字符类,一个字符类可以匹配它所包含的任一字符。“^”符号用来表示非。字符类可以使用连字符来表示字符范围,使用/[a-zA-Z0-9]/匹配任何字母和数字。

由于某些字符类非常常用,因此使用了这些字符的转义字符来表示它们。

[...]    方括号内的任意字符

[^...]  除方括号内的任意字符

.        除换行符合其他Unicode行终止符之外的任意字符

\w     任何ASCII字符组成的单词,等价于[a-zA-Z0-9]

\W    任何不是ASCII字符组成的单词,等价于[^a-zA-Z0-9]

\s      任何Unicode空白符

\S      任何非Unicode空白符的字符

\d      任何ASCII数字等价于[0-9]

\D      除了ASCII数字之外的任何字符,等价于[^0-9]

[\b]    退格直接量(特例)


4.重复

根据正则的语法,可以把两位数描述成/\d\d/,但是还没有一种方法可以用来描述任意多位数字。因此就要用一些特殊字符表示某元素重复出现的次数。

{n,m}  匹配次数大于等于n,小于等于m

{n,}    大于等于n

{n}     等于n

?       匹配0次或者1次,表示可选,等价于{0,1}

+       匹配1次或多次,等价于{1,}

*        匹配0次或多次,等价于{0,}

上面列出的重复匹配字符是尽可能多地匹配,而且允许后续的正则表达式继续匹配。称之为“贪婪的”匹配。

非贪婪匹配只需要在待匹配的字符后跟随一个问号:“?? ”+?“ “*?”或者“{1,5}?”

将“aaa”作为匹配字符串,/a+/会匹配它的三个字符,/a+?/只能匹配第一个

将“aaab”作为匹配字符串,贪婪和非贪婪匹配是一样的。因为正则表达式总是会寻找字符串中第一个可能匹配的字符串。


5.选择、分组和引用

字符“|”表示或。注意:匹配次序是从左至右,如果左边的匹配就忽略右边,即使右边产生更好的匹配项。例如/a|ab/匹配字符串“ab”时就只匹配第一个字符。

“()”有多种作用。

一个作用是把单独的项组合成子表达式,以便可以处理一个独立单元那样用“|”、“*”等对单元内的项进行处理。

另一个作用是允许在同一正则表达式的后部引用前面的子表达式。通过“\”后加一位或多位数字来实现,这个数字指定了带括号的子表达式在正则中从左至右排第几。

还有一个作用是在完整的模式中定义子模式。当一个正则成功和目标字符串相匹配时,可以从目标串中抽出和圆括号中的子模式相匹配的部分。例如正在检索的模式是一个或多个小写字母后跟了一位或多位数字,可以使用/[a-z]+\d/,但是如果我们关心的是匹配尾部的数字,就可以这样表示(/[a-z]+(\d+)/)。


6.指定匹配位置

一些元素不匹配某个可见的字符,它们只是指定匹配发生的合法位置。有时我们称这些元素为正则表达式的锚。

^    匹配字符串的开头,在多行检索中,匹配一行的开头

$    匹配字符串的结尾,在多行检索中,匹配一行的结尾

\b   匹配一个单词的边界

\B   匹配非单词边界的位置

(?=p)  零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配P的那些字符

(?!p)   零宽负先行断言,要求接下来的字符不与p匹配

例如要匹配一种常用的程序设计语言的名字,但只有再其后面出现冒号时才匹配,可以使用/[jJ]ava([sS]cript)?(?=\:)/


7.修饰符

修饰符用以说明高级匹配模式的规则。

i    说明模式匹配不区分大小写

g   说明模式匹配应该是全局,也就是被检索字符串中所有的匹配

m  在多行模式中执行匹配

比如正则/java$/im既可以匹配“java”,也可以匹配“Java\nis fun”。


例子

根据上面正则规则,看下面几个正则例子:

一、匹配数字和字符串

  • 整数或者小数:^[0-9]+.{0,1}[0-9]{0,2}$

  • 只能输入数字:"^[0-9]*$"。

  • 只能输入n位的数 字:"^d{n}$"。

  • 只能输入至少n位的数字:"^d{n,}$"。

  • 只能输入m~n位的数字:。"^d{m,n}$"

  • 只 能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。

  • 只能输入有两位小数的正实数:"^[0-9]+(.[0-9] {2})?$"。

  • 只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。

  • 只能输入非零的正整 数:"^+?[1-9][0-9]*$"。

  • 只能输入非零的负整数:"^-[1-9][]0-9"*$。

  • 只能输入长度为3的字 符:"^.{3}$"。

  • 只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。

  • 只能输入由26个大写英文字母组成的字 符串:"^[A-Z]+$"。

  • 只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。

  • 只能输入由数字和26个英文字母组 成的字符串:"^[A-Za-z0-9]+$"。

  • 只能输入由数字、26个英文字母或者下划线组成的字符串:"^w+$"。

二、验证用户信息

  • 验证用户 密码:"^[a-zA-Z]w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。

  • 验证是否含有 ^%&',;=?$"等字符:"[^%&',;=?$x22]+"。

  • 只能输入汉字:"^[u4e00-u9fa5] {0,}$"

  • 验证Email地址:"^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$"。

  • 验 证InternetURL:"^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$"。

  • 验证电话号 码:"^((d{3,4}-)|d{3.4}-)?d{7,8}$"正确格式为:"XXX-XXXXXXX"、"XXXX- XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。

  • 验证身份证号 (15位或18位数字):"^d{15}|d{18}$"。

  • 验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式 为:"01"~"09"和"1"~"12"。

  • 验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确 格式为;"01"~"09"和"1"~"31"。

三、匹配中文和其他特殊字符

  • 匹配中文字符的正则表达式: [u4e00-u9fa5]

  • 匹配双字节字符(包括汉字在内):[^x00-xff]

  • 匹配空行的正则表达式: [s| ]*

  • 匹配html标签的正则表达式:<(.*)>(.*)</(.*)>|<(.*)/>

  • 匹配首尾空格的正则表达式:(^s*)|(s*$)


链接: https://fly63.com/article/detial/11367

javascript较全常用的表达正则验证,js中采用test()方法

正则表达式是一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。本文整理了JS较全且实用正则表达式。

js使用正则过滤emoji表情符号

手机端常常会遇到用户输入框,输入emoji,如果是数据库是UTF8,会遇到报错,原因是:UTF-8编码有可能是两个、三个、四个字节。Emoji表情是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。

一次记住js的6个正则方法

来记忆一些常用特殊字符,这个是正则本身的范畴了,是不是总觉得记不住?其实我也记不住,每次都是去搜索和online验证来完成一些任务。我也困恼过,其实最后还是因为自己写的少吧,唯手熟尔。。。

密码强度的正则表达式(JavaScript)总结

本文给出了两个密码强度的正则表达式方案,一个简单,一个更复杂和安全。并分别给出了两个方案的解析和测试程序。一般大家可以根据自己的项目的实际需要,自行定义自己的密码正则约定。

JavaScript判断字符串包含中文字符的方法总结

JS中判断一个字符串是否包含汉字,下面就介绍2中常用的实现方法:用正则表达式判断、用 Unicode 字符范围判断。

js常用正则表达式验证大全(整理详细且实用)

正则表达式对象用来规范一个规范的表达式,本文讲的是JS正则表达式大全(整理详细且实用),包括校验数字、字符、一些特殊的需求等等

javascript 正则表达式之分组与前瞻匹配详解

本文主要讲解javascript 的正则表达式中的分组匹配与前瞻匹配的,需要对正则的有基本认识。分组匹配:捕获性分组匹配、非捕获性分组匹配。前瞻匹配:正向前瞻匹配: (?=表达式) 后面一定要匹配有什么、反向前瞻匹配: (?!表达式) 后面一定不能要有什么

利用正则表达式去除所有html标签,只保留文字

后台将富文本编辑器中的内容返回到前端时如果带上了标签,这时就可以利用这种方法只保留文字。利用正则表达式去除所有html标签,只保留文字

正则表达式后行断言 • 探索 ES2018 和 ES2019

先后行断言(Lookaround Assertion)是正则表达式中的一个构造,明确了当前位置的前后字符序列,但没有其他副作用。当前 JavaScript 唯一支持的 Lookaround Assertion 是 先行断言,其匹配当前位置接下来的字符序列

循环下的正则匹配?说说正则中的lastIndex

正则有一个属性叫lastIndex,它表示正则下一次匹配时的起始位置。一般情况下我们是使用不到它的,但在正则中包含全局标志g时,正则的test和exec方法就会使用到它

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!