详解JavaScript正则表达式之分组匹配及反向引用_Javascript教程-查字典教程网
详解JavaScript正则表达式之分组匹配及反向引用
详解JavaScript正则表达式之分组匹配及反向引用
发布时间:2016-12-30 来源:查字典编辑
摘要:语法元字符:(pattern)作用:用于反复匹配的分组属性$1~$9如果它(们)存在,用于得到对应分组中匹配到的子串1或$1用于匹配第一个分...

语法

元字符:(pattern)作用:用于反复匹配的分组

属性$1~$9如果它(们)存在,用于得到对应分组中匹配到的子串

1或$1用于匹配第一个分组中的内容

2或$2用于匹配第一个分组中的内容

...

9或$9用于匹配第一个分组中的内容

用法示例

var reg = /(A+)((B|C|D)+)(E+)/gi;//该正则表达式有4个分组 //对应关系 //RegExp.$1 <-> (A+) //RegExp.$2 <-> ((B|C|D)+) //RegExp.$3 <-> (B|C|D) //RegExp.$4 <-> (E+)

以上的代码也同时给出了$1~$9的用法

$1~$9是正则表达式预定义的静态属性,通过RegExp.$1引用

分组嵌套关系说明

上述代码也可以说明分组的嵌套关系

//测试环境 Chrome浏览器 var str = "ABCDE"; var reg = /(A+)((B|C|D)+)(E+)/gi; str.match(reg);//输出:["ABCDE"] reg.exec(str,'i');//输出:["ABCDE", "A", "BCD", "D", "E"] RegExp.$1;//输出:"A" RegExp.$2;//输出:"BCD" RegExp.$3;//输出:"D" RegExp.$4;//输出:"E"

这样就可以很明白的看出分组的嵌套关系了

总结来说:大的分组中存在小的分组时,小的分组是排在该大分组后面的分组,以此类推

第二部分

这部分主要讲解类似于"1"这个东西的用法

分组匹配之反向引用

语法

元字符 1~9作用:用来表示前面以匹配的字符或分组的一个引用

用法示例

参考文章:[原]AS3 js正则表达式 反向引用(backreference)

上面说的可能有些拗口,下面给一个例子:

//一般情况,当我们想匹配任意两个相同的字符(复杂一点就是两个相同的分组)时,往往可以借助下面的写法 //说明: //(w)用来匹配任何除了换行和制表符的字符, 而1是对(w)的一个引用, 所以你可以理解成: (w)1 就是(w)(w) //但是, //(w)1 和 (w)(w)的不同之处在于, (w)(w)表示任意两个连续的字符, 比如Ac, MM, K9, 都可以, // 但(w)1只能是AA, CC, 99 这样连续相同的字符 //所以, 你可以这样理解, 1 是对(w)的一个实例化引用, 当(w) 匹配到A时, 1 被表达成A, 当(w)匹配9时, 1 被表示成9 //说了这么多, 可能有些废话, 下面这个例子就很好理解了 var str = "AA Am 99"; var reg = /(w)1/g; str.match(reg);//输出: ["AA", "99"]

所以, 参照上边我所引用的文章中给出的 "关键字搜索高亮显示的正则表达用法" 的例子, 我给出自己改进的小的DEMO

虽然这个DEMO没有用到任何的关于反向引用的知识点::>_<::

//测试环境 Chrome浏览器 var key = "keywords";//搜索的关键字 var text = " I am a text, and I have a keywords before this";//待匹配的文本 var reg = new RegExp("("+key+")","g"); text.replace(reg,"<span>$1</span>");//输出: " I am a text, and I have a <span>keywords</span> before this"

下面给大家详细介绍下正则表达式之反向引用

示例1:

public static void main(String[] args) { String s="99-3933"; boolean b=Pattern.matches("([d])1[-]([3])12{2}", s); System.out.println(b); }

反向引用,匹配重复的数字

([d])====>1

([3])====>2

示例2:

public class test { public static void main(String[] args) { String s="99-393399-3933"; boolean b=Pattern.matches("(([d])2[-]([3])23{2})1", s); System.out.println(b); } }

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Javascript教程学习
    热门Javascript教程学习
    编程开发子分类