如何为我的正则表达式指定非捕获组以允许带有破折号的标记

时间:2013-07-09 07:00:04

标签: javascript jquery regex

嗯..我想在jQuery核心内对正则表达式匹配器进行一些小改动,以实现我的目标: 允许在名称中使用短划线匹配标签

示例:<auto-link/><user-circle/><something-else></something-else>

今天,jQuery标记匹配器/正则表达式被声明为rsingleTag变量,你可以在他们的源代码上see here,但它与我需要的不匹配。所以我想出了我修改后的变化:

  • 默认正则表达式:/^<(\w+)\s*\/?>(?:<\/\1>|)$/
  • 带破折号的修改后的正则表达式:/^<(\w(\w|-\w)*\s*\/?)>(?:<\/\1>|)$/

因此,我所做的更改完全匹配,但是当我尝试使用rsingleTag.exec("<auto-link/>")从中提取字符串时,预期结果与jQuery默认正则表达式不同。

  • 默认正则表达式:rsingleTag.exec("<div/>") =&gt; ["<div/>", "div"]
  • 使用短划线修改的正则表达式:rsingleTag.exec("<div/>") =&gt; ["<div/>", "div/", "v"]

我希望修改后的正则表达式结果与默认的正则表达式结果相同,并允许带有破折号的标签。我做错了什么或者如何解决?

1 个答案:

答案 0 :(得分:3)

/^<(\w(\w|-\w)*\s*\/?)>(?:<\/\1>|)$/   - your attempt
/^<(\w[-\w]*)\s*\/?>(?:<\/\1>|)$/      - your intention