正则表达式的一点疑问???限定符?

xiongzhijian 2009-07-30 03:15:08
re = /<tpl\b[^>]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/,


这是截取的一段ext xTemplate中的源码,
想知道.."\2"在这里表示什么意思...求教.

大家都来讨论一下..谢谢!
...全文
162 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tuoxieyz 2010-04-01
  • 打赏
  • 举报
回复
我想问下为什么要加上\2
/<tpl\b[^>]*>((?:([^<]+)|<(?!tpl\b[^>]*>))*?)<\/tpl>/
这样写应该也没问题呀,求教
virus7581 2009-07-30
  • 打赏
  • 举报
回复
re = /<tpl\b[^>]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/

[^<]+
eugenepada 2009-07-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xiongzhijian 的回复:]
不知道楼上的兄弟,是不是查的msdn上的资料..
[/Quote]

不是,我在这里学过一段时间
http://www.regexlab.com/zh/regref.htm
浴火_凤凰 2009-07-30
  • 打赏
  • 举报
回复
反向引用
xiongzhijian 2009-07-30
  • 打赏
  • 举报
回复
不知道楼上的兄弟,是不是查的msdn上的资料..
eugenepada 2009-07-30
  • 打赏
  • 举报
回复
这里值的是捕获组([^<]+)
eugenepada 2009-07-30
  • 打赏
  • 举报
回复
反向引用,


反向引用 \1, \2...

表达式在匹配时,表达式引擎会将小括号 "( )" 包含的表达式所匹配到的字符串记录下来。在获取匹配结果的时候,小括号包含的表达式所匹配到的字符串可以单独获取。这一点,在前面的举例中,已经多次展示了。在实际应用场合中,当用某种边界来查找,而所要获取的内容又不包含边界时,必须使用小括号来指定所要的范围。比如前面的 "<td>(.*?)</td>"。

其实,"小括号包含的表达式所匹配到的字符串" 不仅是在匹配结束后才可以使用,在匹配过程中也可以使用。表达式后边的部分,可以引用前面 "括号内的子匹配已经匹配到的字符串"。引用方法是 "\" 加上一个数字。"\1" 引用第1对括号内匹配到的字符串,"\2" 引用第2对括号内匹配到的字符串……以此类推,如果一对括号内包含另一对括号,则外层的括号先排序号。换句话说,哪一对的左括号 "(" 在前,那这一对就先排序号。

举例如下:

举例1:表达式 "('|")(.*?)(\1)" 在匹配 " 'Hello', "World" " 时,匹配结果是:成功;匹配到的内容是:" 'Hello' "。再次匹配下一个时,可以匹配到 " "World" "。

举例2:表达式 "(\w)\1{4,}" 在匹配 "aa bbbb abcdefg ccccc 111121111 999999999" 时,匹配结果是:成功;匹配到的内容是 "ccccc"。再次匹配下一个时,将得到 999999999。这个表达式要求 "\w" 范围的字符至少重复5次,注意与 "\w{5,}" 之间的区别。

举例3:表达式 "<(\w+)\s*(\w+(=('|").*?\4)?\s*)*>.*?</\1>" 在匹配 "<td id='td1' style="bgcolor:white"></td>" 时,匹配结果是成功。如果 "<td>" 与 "</td>" 不配对,则会匹配失败;如果改成其他配对,也可以匹配成功。

87,901

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧