资讯专栏INFORMATION COLUMN

JavaScript正则表达

wean / 2125人阅读

摘要:分组我们可以通过使用圆括号来对正则表达式进行分组。构成正则表达式中的子表达式。例如,引用的是第一个带括号的子表达式,则表示引用的是第三个带括号的子表达式。

为何要用正则

正则表达式是为了专门解决文本的两个问题而产生的:

查找特定的文本(搜索)

查找并编辑特定的文本(替换)

JavaScript中的正则

JavaScript中的正则表达式用RegExp对象来表示。

创建方式:

 1. var pattern = new RegExp("s$");  //用RegExp()构造函数来创建
 2. var pattern = /s$/;  //直接量语法来创建
正则的语法 直接量字符

一般来讲,正则表达式中的所有字母和数字都是按照字面含义进行匹配的。eg:/s/就是匹配字母s。
非一般的话,就是那些转义字符和正则中自带的一些特殊含义的符号。如果想在正则表达式中使用这些字符的直接量进行匹配,则必须使用前缀.

转义字符:
 
 	 o v f xnn uxxxx cX
殊含义的符号: ^ $ . * +  ? = ! : |  / () [ ] { }  
字符类

用方括号包裹直接量字符就组成了字符类。

/[abc]/  //匹配字母"a","b","c"中的任意一个

注意:字符类能够匹配包含在中括号中的一系列字符中的任意一个,但是匹配的结果只能够是其中的一个而不是多个。

var str="abcd";
var reg=/[abcd]/;
console.log(str.match(reg));
//结果是 ["a", index: 0, input: "abcd"]
使用连字符"-"

字符类使用连字符目的是用来表示字符范围。

    /[a-z]/        //匹配小写字母
    /[a-zA-Z0-9]/  //匹配任何字母和数字

注意:字符类可以使用连字符"-"来确定一个匹配的范围,当然使用连字符也是有原则的,前后两个字符是有顺序的,如果使用相同的编码,后面的字符码位应大于或等于前面字符的码位,例如:
[0-9]//正确的
[9-0]//错误的

排除型字符类"^"

[^]是一个排除型字符类,用以匹配不在中括号中的任一字符,当然匹配结果也只能够是一个字符.

/[^abc]/   //匹配除了字符"a"、"b"、"c"之外的任意字符
重复

解决正则表达式中某元素的“重复出现次数”。

重复字符语法:

{n,m}  匹配前一项至少n次,但不能超过m次
{n,}   匹配前一项n次或者更多次
{n}    匹配前一项n次
?      匹配前一项0次或者1次,也就是说前一项是可选的,等价于{0,1}
+      匹配前一项1次或者多次,等价于{1,}
*     匹配前一项0次或者多次,等价于{0,}
贪婪重复 vs 非贪婪重复

贪婪重复: 尽可能多的匹配

非贪婪重复: 尽可能少的匹配

    ?       ??
    +       +?
    *       +?

注意:使用非贪婪的匹配模式所得的结果可能和期望并不一致。试一试下面例子想想为什么:

    var str = "aaab";
    var reg =  /a+?b/;
    console.log(str.match(reg));
选择、分组和引用 字符”|”

字符”|”用于分隔供选择的字符 ,其实就是或的意思。例如/ab|cd|ef/ 匹配的是“ab”或“cd”或“ef”。

注意:选择项的尝试匹配顺序是从左到右考虑,直到发现了匹配项。如果左边的选择项匹配,则忽略右边的匹配项,即使它产生更好的匹配。

分组

我们可以通过使用圆括号"()"来对正则表达式进行分组 。也就是说把括号内的当成一个独立的单元。构成正则表达式中的子表达式。

引用

引用:我们用引用的对象是谁?

这里就要说下,圆括号"()"在正则表达式中另一个作用是在完整的模式中定义子模式 。

例如:我想要检索的条件是3个字母加上4个数字

    var pattern = /[a-z]{3}d{4}/ ;  //3个字母加4个数字的匹配模式

但假定我们真正关心的是每个匹配尾部的数字?要怎么引用数字?so,圆括号"()"派上用场了。

    var pattern = /[a-z]{3}(d{4})/ ;  //3个字母加4个数字的匹配模式 

带圆括号的表达式的另一个用途是允许我们在同一正则表达式的后部引用前面的子表达式。这是通过在字符””后加一位或多位数字实现的。例如,1引用的是第一个带括号的子表达式,3则表示引用的是第三个带括号的子表达式。

问:如果圆括号"()"中嵌套圆括号"()",那么圆括号"()"的位置怎么计算?

答:以圆括号"()"的左括号位置来算。

var pattern = /([Jj]ava([Sscript)?)siss(funw*)/ ;  //([Ss]cript)就被指定为/2 

接下来再来看看一个例子:

var pattern = /[""][^""]*[""]/ ;   //匹配的是单引号或双引号之内的0个或多个字符

如果我想要前后引号是匹配的(都是单引号或都是双引号)呢?(这时候就要想起引用了)

var pattern = /([""])[^""]*1/ ; 

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

    |         选择。匹配的是该符号左边的子表达式或右边的子表达式,其实就是布尔“或”
    (…)         组合。将几个项目组合为一个单元,这个单元可由*、+、?和|等符号使用,而且 还可以记住和这个组合匹配的字符以供此后的引用使用
    (?:…)    只是分组。把项目组合到一个单元,但是不记忆与该组匹配的字符
    
        和第n个分组第一次匹配的字符相匹配。组是括号 中的子表达式(可嵌套,以左半括号开始数,从1开始数,一到数下去 ),以(?:…)分组的组不进行编码
指定匹配位置

正则表达式中的有些元素不匹配某个可见的字符,它们指定匹配发生的合法位置,我们称这些元素为正则表达式的锚,它们将模式定位在搜索字符串的特定位置上。

^    匹配字符串的开头,在多行检索中,匹配一行的开头
$    匹配字符串的结尾,在多行检索中,匹配一行的结尾
   匹配一个单词的边界,简言之,就是位于字符w和W之间的位置,或位于字符W和字符串开头或结尾之间的位置(但需要注意,[]匹配的是退格符)
B   匹配非单词边界的位置
(?=p) 零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符
(?!p) 零宽负向先行断言,要求接下来的字符不与p匹配
修饰符

修饰符用以说明高级匹配模式的规则,放在"/"符号之外。

i   执行不区分大小写的匹配
g   执行一个全局匹配,简言之,即找到所有的匹配,而不是在找到第一个之后就停止
m   多行匹配模式,^匹配一行的开头和字符串的开头,$匹配行的结束和字符串的结束

例子:

var str="This is an
 antzone good"; 
var reg=/an$/;
console.log(str.match(reg));
//以上代码不能够匹配字符串"an",尽管"an"后面已经换行了,但是并没有采用多行匹配,所以不是字符串行的结尾。
var str="This is an
 antzone good"; 
var reg=/an$/m;
console.log(str.match(reg));
//以上代码可以匹配字符串"an",因为采用了多行匹配。

总结:
本文简单的介绍了javascript正则表达式的一些基础知识,总结知识点就是用[],{},(),正则的特殊字符,锚,还有修饰符等等,来组成一个一个复杂的正则表达式。

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

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

相关文章

  • 正则表达

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

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

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

    wqj97 评论0 收藏0
  • JavaScript 中的正则表达

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

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

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

    wenzi 评论0 收藏0
  • JavaScript正则表达

    摘要:引用就是允许在同一个正则表达式的后部引用前面的子表达式。这个数字制定了带圆括号的子表达式在正则表达式中的位置。对正则表达式中前一个子表达式的引用,并不是指对子表达式模式的引用,而是指与那个模式匹配的文本的引用。 前言 本文主要是在读《JavaScript高级程序语言设计》一书有关正则表达式的章节的知识点记录,方便后续查阅。 什么是正则表达式 正则表达式是用来描述字符组合的某种规则。它可...

    sixleaves 评论0 收藏0
  • JavaScript中的正则表达

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

    _Zhao 评论0 收藏0

发表评论

0条评论

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