3

好吧..我想对 jQuery 核心中的正则表达式匹配器进行一些小改动,以实现我的目标:允许在名称中匹配带有破折号的标签

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

今天,jQuery tag matcher/regex 被声明为rsingleTag变量,你可以在这里查看它们的源代码,但它与我需要的不匹配。所以我想出了我修改后的变化:

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

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

  • 默认正则表达式:rsingleTag.exec("<div/>")=>["<div/>", "div"]
  • 用破折号修改正则表达式:rsingleTag.exec("<div/>")=>["<div/>", "div/", "v"]

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

4

1 回答 1

3
/^<(\w(\w|-\w)*\s*\/?)>(?:<\/\1>|)$/   - your attempt
/^<(\w[-\w]*)\s*\/?>(?:<\/\1>|)$/      - your intention
于 2013-07-09T07:05:18.963 回答