资讯专栏INFORMATION COLUMN

JavaScript正则表达式

MorePainMoreGain / 1313人阅读

摘要:正则表达式的模式规范是由一系列字符构成的。正则表达式的圆括号作用把多带带的项组合成子表达式,以便可以像处理一个多带带的单元那样用或者等来对单元格内的项进行处理。

该文章转载自我的博客Alvin-Liu。

JavaScript采用的是Perl语言正则表达式语法的一个相当完整的子集。正则表达式的模式规范是由一系列字符构成的。多数字符(包括字母数字字符)描述的都是按照字面意思进行匹配的字符。比如说 /java/ 就和所有包含子串 java 的字符串相匹配。然正则表达式中的其它字符不是按照字面意思进行匹配的,但它们都具有特殊的意义。正则表达式 /s$/ 包含两个字符, 第一个特殊字符 s 是按照字面意思与自身相匹配。第二个字符 $ 是一个特殊字符,它所匹配的是字符串的结尾。以正则表达式 /s$/ 匹配的就是以字母 s 结尾的字符串。

直接量字符:

在正则表达式中,许多标点符号都有特殊的含义。下面是常见字符和它们的含义

字符 描述
制表符
换行符
回车符
f 换页符
 与回退字符
v 垂直制表符
空字符
字符类:

将直接量字符多带带放进方括号内就组成了字符类。一个字符类可以匹配它所包含的任意字符。字符类可以使用连字符来表示字符范围。

/[a-zA-Z0-9]/         //匹配任意的字母和数字

字符类表:

字符 匹配
[...] 方括号内的任意字符
1 不在方括号内的任意字符
. 除了换行和回车之外的任意字符
w 单词字符(所有的字母)
W 非单词字符
s 空白字符
S 非空白字符
d 数字字符
D 非数字字符
[] 退格直接量(特例)
重复(“贪婪的”匹配):

匹配重复字符是尽可能多地匹配,而且允许后续的正则表达式继续匹配。

重复字符语法表:

字符 含义
? 匹配前一项零次或一次
* 匹配前一项零次或多次(任意次)
+ 匹配前一项一次或多次(至少一次)
{n,m} 匹配前一项至少n次但不超过m次
{n,} 匹配前一项至少n次
{n} 匹配前一项n次
/d{2,4}/         //匹配2 ~ 4个数字
/s+javas+/      //匹配前后带有一个或多个空格的字符串“java”
    
非贪婪的重复:

只须在“贪婪的”匹配的字符后跟随一个问号即可: ??+?,*?{1,5}?

选择、分组和引用

选择项的尝试匹配次序是从做左到右,直到发现了匹配项。如果左边的选择项匹配,就忽略右边的匹配项,即使它产生更好的匹配。

正则表达式的圆括号作用:

1、把多带带的项组合成子表达式,以便可以像处理一个多带带的单元那样用 |*+或者 ? 等来对单元格内的项进行处理。

/java(script)?/   //可以匹配字符串 java,其后可以有 script也可以没有

2、在完整的模式中定义子模式。

/[a-z]+d+/       //假定我们关心的是每个匹配尾部的数字
/[a-z]+(d+)/     //就可以从检索的匹配中抽取数字了

3、允许在同一正则表达式的后部引用前面的子表达式。

1             //引用的是第一个带圆括号的子表达式,
3             //引用的是第三个带圆括号的子表达式 ,
/[Jj]ava(?:[Ss]cript)?)siss(funw*)/    //其中的 (funw*) 匹配的文本可以用 2 来引用(注意:“(?: ” 形式的分组不编码)。

注意1: 因为子表达式可以嵌套另一个子表达式,所以它的位置是参与计数的左括号的位置。

/[Jj]ava([Ss]cript)?)siss(funw*)/       //其中嵌套的子表达式 ([Ss]cript) 可以用 2 来指代

注意2:对正则表达式中前一个子表达式的引用,并不是对子表达式的模式的引用,而指的是与那个模式相匹配的文本的引用。

/[" ""][^" ""]*[" ""]/       

该例匹配的是单引号或双引号之内的0个或多个字符,但不要求左侧和右侧的引号匹配(即,都是单引号或都是双引号)

如果要匹配可用:

/([" ""])[^" ""]*1/        

正则表达式不允许双引号括起的内容中有单引号,反之亦然。所以下面之中写法是非法的:

/([" ""])[^1]*1/ 

正则表达式的选择、分组和引用字符:

字符 含义
| 选择,匹配左边或右边的子表达式
(....) 组合,将几个项组合为一个单元,记忆与该组匹配的字符
(?:...) 组合,将项组合为一个单元,不记忆与该组匹配的字符
和第n个分组第一次匹配的字符相匹配,组是圆括号中的子表达式。“(?:”形式的分组编码
指定匹配位置
字符 含义
^ 匹配字符开头
$ 匹配字符结尾
 匹配单词边界
B 匹配非单词边界
(?=p) 零宽正向先行断言,它断言自身出现的位置的后面能匹配表达式p
(?!p) 零宽负向先行断言,它断言自身出现的位置的前面能匹配表达式p
修饰符
修饰符 描述
i 执行对大小写不敏感的匹配
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)
m 执行多行匹配
模式匹配String方法:

1、search()方法:它的参数是一个正则表达式(如果参数不是正则表达式,则首先会通过RegExp构造函数将它转换成正则表达式),返回第一个与之匹配的子串的起始位置,如果找不到,返回 -1 ;

"JavaScript".search(/script/i);      //返回4

2、replace()方法:它的第一个参数是正则表达式,第二个参数是要进行替换的字符串。如果在替换字符串中出现了 $ 加数字,那么replace() 将用与指定的子表达式匹配的文本来替换这两个字符。

var quote = /"([^"]*)"/g;         //用中文半角引号替换英文引号,同时保持引号之间的内容(存储在$1中)没有被修改
text.replace(quote, "“$1”");

3、match()方法:它的参数是一个正则表达式(如果参数不是正则表达式,则首先会通过RegExp构造函数将它转换成正则表达式),返回的是一个由匹配结果组成的数组。

var url = /(w+)://([w.]+)/(s*)/;
var text = "Visit my blog at http://www.limon.space/blog";
var result = text.match(url);
result[0];           //包含 "Visit my blog at http://www.limon.space/blog"
result[1];           //包含 "http"
result[2];           //包含 "www.limon.space"
result[3];           //包含 "blog"

4、split()方法:用以将调用它的字符串拆分成一个子串组成的数组,使用的是split()的参数。

"123,456,789".split(",");                 //返回["123","456","789"]
"1, 2, 3, 4, 5".split(/s*,s*/);      //返回["123","456","789"]

... ↩

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/87707.html

相关文章

  • 正则达式

    摘要:本文内容共正则表达式火拼系列正则表达式回溯法原理学习正则表达式,是需要懂点儿匹配原理的。正则表达式迷你书问世了让帮你生成和解析参数字符串最全正则表达式总结验证号手机号中文邮编身份证地址等是正则表达式的缩写,作用是对字符串执行模式匹配。 JS 的正则表达式 正则表达式 一种几乎可以在所有的程序设计语言里和所有的计算机平台上使用的文字处理工具。它可以用来查找特定的信息(搜索),也可以用来查...

    bang590 评论0 收藏0
  • JavaScript正则达式的匹配模式

    摘要:选择分组和引用正则表达式的语法还包括指定选择项子表达式分组和引用前一子表达式的特殊字符。带圆括号的表达式的另一个用途是允许在同一正则表达式的后部引用前面的子表达式。 正则表达式(regular expression)是一个描述字符模式的对象。JavaScript的 RegExp类 表示正则表达式,String和RegExp都定义了方法,后者使用正则表达式进 行强大的模式匹配和文本检索与...

    wqj97 评论0 收藏0
  • JS正则达式入门,看这篇就够了

    摘要:如果遇到非常的复杂的匹配,正则表达式的优势就更加明显了。关于正则表达式书写规则,可查看,上面说的很清楚了,我就不贴出来了。替换与正则表达式匹配的子串,并返回替换后的字符串。结语正则表达式并不难,懂了其中的套路之后,一切都变得简单了。 前言 在正文开始前,先说说正则表达式是什么,为什么要用正则表达式?正则表达式在我个人看来就是一个浏览器可以识别的规则,有了这个规则,浏览器就可以帮我们判断...

    wenzi 评论0 收藏0
  • JavaScript 中的正则达式

    摘要:正则表达式的意义中的正则表达式使用表示,可以使用构造函数来创建对象,不过对象更多的是通过一种特殊的直接量语法来创建。用构造函数也可以定义一个与之等价的正则表达式,代码如下正则表达式的模式规则是由一个字符序列组成的。 正则表达式的模式匹配 正则表达式(regular expression)是一个描述字符模式的对象。javascript的RegExp对象表示正则表达式,String和Reg...

    _Dreams 评论0 收藏0
  • JavaScript中的正则达式

    Javascript的正则表达式是前端中比较重要的部分,正则表达式主要用于字符串处理,表单验证等场合,实用高效,文章主要对JavaScript中的正则的学习与总结 正则表达式的定义 正则表达式:是一个描述字符模式的对象,JavaScrip中正则表达式用RegExp对象表示,可以使用RegExp构造函数来创建正则对象 正则表达式的创建 1.字面量创建 var reg = /[a-z]/; 2.构...

    _Zhao 评论0 收藏0
  • 简单说 正则达式——要注意lastIndex属性

    摘要:返回是一个只读的布尔值,看这个正则表达式是否带有修饰符。方法,它的参数是一个字符串,用对某个字符串进行检测,如果包含正则表达式的一个匹配结果,则返回,否则返回。总结这次主要是说说,中正则表达式对象的个属性,而最需要注意的就是属性了。 说明 这篇文章,主要和大家聊聊JavaScript中RegExp对象的属性。 解释 每个RegExp对象都包含5个属性,source、global、ign...

    jokester 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<