1

我正在研究一个正则表达式来匹配所有引号(双引号和单引号),它们前面必须有特定的字符,并且将在达到相同的引号类型或遇到 HTML 注释(<!--)时结束。

游戏规则如下:

  1. HTML 标签名称本身(例如“<a>”)无关紧要;正则表达式仅从 HTML 元素的属性中获取输入(<a all="of this in bold is the attribute section">
  2. 正则表达式必须能够找到单引号 ( ') 和双引号 ( "),但只有在达到它自己的引号类型 ( \1)、HTML 开始 ( <!--) 或输入结尾( ) 时才能转义$
  3. 如果遇到 HTML 注释,则引用将被中断,但仍被视为引用:<a id="works <!-- inpterrupted -->
  4. 在第一个引号之前只能存在一组特定的字符,遵循以下模式:[^\w!#£¤€´¨-.:]

看到这个正则表达式

/[^\w!#£¤€´¨\-.:]('|")(.|\n)*?(\1|<!--|$)/

但是,DISALLOW 区域(在正则表达式中)存在问题。正则表达式永远不应该在这里工作,因为第一个字符是不允许的。

在此先感谢您的帮助!

澄清

regexpal.com上的示例。一切——除了禁止部分下的内容——都是正确的。

期望的结果应该如下。粗体表示使用上面显示的正则表达式匹配。(许多)HTML 注释以一致的方式结束 HTML 标记。

允许

  • <a '' <!-- -->
  • <a $'' <!-- -->
  • <a %'' <!-- -->
  • <a &'' <!-- -->
  • <a /'' <!-- -->
  • <a ('' <!-- -->
  • < a )'' <!-- -->
  • <a {'' <!-- -->
  • <a }'' <!-- -->
  • <a ['' <!-- -->
  • <a ]'' <!-- -->
  • <a ='' <!-- -->
  • <a ?'' <!-- -->
  • <a +'' <!-- -->
  • <a `'' <!-- -->
  • <a |'' <!-- -->
  • <a ^'' <!-- -->
  • <a ~'' <!-- -->
  • <a *'' <!-- -->
  • <a ,'' <!-- -->
  • <a ;'' <!-- -->
  • <a <'' <!-- -->
  • <a \'' <!-- -->

不允许

  • <a a'' <!-- -->
  • <a 9'' <!-- -->
  • <a !'' <!-- -->
  • <a #'' <!-- -->
  • <a £'' <!-- -->
  • <a ¤'' <!-- -->
  • <a €'' <!-- -->
  • <a ''' <!-- -->
  • <a ¨'' <!-- -->
  • <a -'' <!-- -->
  • <a _'' <!-- -->
  • <a .'' <!-- -->
  • <a :'' <!-- -->

两种报价类型

  • <a single ='hey' double ="you" <!-- -->

停在 HTML 报价单处

  • <a =' <!-- 这将破坏引号和 HTML 标记 -->

输入结束

<一个='

这 - 在新的一行 - 仍然是报价的一部分

4

1 回答 1

1

我知道了。自然,应该排除匹配开头的引号字符。

/[^\w!#£¤€´¨\-.:'"]('|")(.|\n)*?(\1|<!--|$)/
于 2012-12-07T17:23:43.203 回答