我正在研究一个正则表达式来匹配所有引号(双引号和单引号),它们前面必须有特定的字符,并且将在达到相同的引号类型或遇到 HTML 注释(<!--)时结束。
游戏规则如下:
- HTML 标签名称本身(例如“<a>”)无关紧要;正则表达式仅从 HTML 元素的属性中获取输入(<a all="of this in bold is the attribute section">)
- 正则表达式必须能够找到单引号 (
'
) 和双引号 ("
),但只有在达到它自己的引号类型 (\1
)、HTML 开始 (<!--
) 或输入结尾( ) 时才能转义$
。 - 如果遇到 HTML 注释,则引用将被中断,但仍被视为引用:<a id="works <!-- inpterrupted -->
- 在第一个引号之前只能存在一组特定的字符,遵循以下模式:[^\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 标记 -->
输入结束
<一个='
这 - 在新的一行 - 仍然是报价的一部分