如何为我的正则表达式指定非捕获组,以允许使用短划线标记

How to specify non-capturing groups for my regex to allow tags with dashes

本文关键字:许使用 我的 正则表达式      更新时间:2023-09-26

嗯。。为了实现我的目标,我想在jQuery核心中对正则表达式匹配器进行一个小的更改:允许在名称中使用短划线匹配标签

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

今天,jQuery标记matcher/regex被声明为rsingleTag变量,您可以在他们的源代码中看到,但它与我需要的不匹配。所以我想出了我修改后的改变:

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

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

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

我希望修改后的正则表达式结果与默认正则表达式结果相同,并允许使用短划线标记。我做错了什么,或者怎样才能纠正?

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