首页 > 网站 > WEB开发 > 正文

正则表达式解析

2024-04-27 14:07:34
字体:
来源:转载
供稿:网友

正则表达式解析

正则表达式解析

正则表达式,又称正规表示法、常规表示法(英语:Regular ExPRession,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

一.正则表达式的用途

通过使用正则表达式,可以:1.测试字符串内的模式。例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。2.替换文本。可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。3.基于模式匹配从字符串中提取子字符串。可以查找文档内或输入域内特定的文本。例如,您可能需要搜索整个网站,删除过时的材料,以及替换某些 HTML 格式标记。在这种情况下,可以使用正则表达式来确定在每个文件中是否出现该材料或该 HTML 格式标记。此过程将受影响的文件列表缩小到包含需要删除或更改的材料的那些文件。然后可以使用正则表达式来删除过时的材料。最后,可以使用正则表达式来搜索和替换标记。

二.正则表达式语法

1.正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。模式描述在搜索文本时要匹配的一个或多个字符串。

表达式匹配
/^/s*$/匹配空行。
//d{2}-/d{5}/验证由两位数字、一个连字符再加 5 位数字组成的 ID 号。
/</s*(/S+)(/s[^>]*)?>[/s/S]*</s*///1/s*>/匹配 HTML 标记。

2.使用正则表达式

match把所有匹配的东西,全都提取出来。

var str=’abc 234 e45’;var re=//d+/galert(str.match(re));//234,45或alert(str.match(//d+/g));//234,45

replace把所有匹配的东西,全都替换掉。

var str=’abc aaa erw’;var re=/a/galert(str.replace(re,’0’));//0bc,000,erw

3.语法

字符说明
常用的元字符
.匹配除换行符以外的任意字符
/w匹配字母或数字或下划线或汉字
/s匹配任意的空白符
/d匹配数字
/b匹配单词的开始或结束
^匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与“/n”或“/r”之后的位置匹配。在[]中表示取反。
$匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与“/n”或“/r”之前的位置匹配。
常用的反义代码
/W匹配任意不是字母,数字,下划线,汉字的字符
/S匹配任意不是空白符的字符
/D匹配任意非数字的字符
/B匹配不是单词开头或结束的位置
[^x]匹配除了x以外的任意字符
[^aeiou]匹配除了aeiou这几个字母以外的任意字符
常用的限定符

*

零次或多次匹配前面的字符或子表达式。例如,zo* 匹配“z”和“zoo”。* 等效于 {0,}。

+一次或多次匹配前面的字符或子表达式。例如,“zo+”与“zo”和“zoo”匹配,但与“z”不匹配。+ 等效于 {1,}。
?零次或一次匹配前面的字符或子表达式。例如,“do(es)?”匹配“do”或“does”中的“do”。? 等效于 {0,1}。
{n}n 是非负整数。正好匹配 n 次。例如,“o{2}”与“Bob”中的“o”不匹配,但与“food”中的两个“o”匹配。
{n,}n 是非负整数。至少匹配 n 次。例如,“o{2,}”不匹配“Bob”中的“o”,而匹配“foooood”中的所有 o。“o{1,}”等效于“o+”。“o{0,}”等效于“o*”。
{n,m}Mn 是非负整数,其中 n <= m。匹配至少 n 次,至多 m 次。例如,“o{1,3}”匹配“fooooood”中的头三个 o。'o{0,1}' 等效于 'o?'。注意:您不能将空格插入逗号和数字之间。
懒惰限定符
*?重复任意次,但尽可能少重复
+?重复1次或更多次,但尽可能少重复
??重复0次或1次,但尽可能少重复
{n,m}?重复n到m次,但尽可能少重复
{n,}?重复n次以上,但尽可能少重复
分组
( )用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了,你也可以对子表达式进行其它一些操作.字符类来描述一个正确的ip地址:((2[0-4]/d|25[0-5]|[01]?/d/d?)/.){3}(2[0-4]/d|25[0-5]|[01]?/d/d?)
常用分组语法
(exp)匹配exp,并捕获文本到自动命名的组里
(?<name>exp)匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp)匹配exp,不捕获匹配的文本,也不给此分组分配组号
(?=exp)匹配exp前面的位置
(?<=exp)匹配exp后面的位置
(?!exp)匹配后面跟的不是exp的位置
(?<!exp)匹配前面不是exp的位置
(?#comment)这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读
常用的处理选项
i匹配时不区分大小写。
ggloble进行全局匹配,指匹配到目标串的结尾
m更改^和$的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。(在此模式下,$的精确含意是:匹配/n之前的位置以及字符串结束前的位置.)

字符转义

/

将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,“n”匹配字符“n”。“/n”匹配换行符。序列“//”匹配“/”,“/(”匹配“(”。

JS 中的特殊字符
$、( )、*、+、.、[ ]、?、//、^、{ }、|若要匹配这些字符,请使用 /限定。
优先级顺序(从高到低)
/转义符
(), (?:), (?=), []括号和中括号
*, +, ?, {n}, {n,}, {n,m}限定符
^, $, /任何元字符、任何字符定位
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表