我有这样的场景
在html标签中,如果属性没有被单引号或双引号包围..我想为它添加双引号
如何为此编写正则表达式?
答案 0 :(得分:3)
如果重复此正则表达式的次数与元素中可能存在标记的次数一样多,那么只要文本相当正常并且不包含许多可能产生误报的特殊字符,这应该有效。
"<a href=www.google.com title = link >".replace(/(<[^>]+?=)([^"'\s][^\s>]+)/g,"$1'$2'")
正则表达式说:打开标记(<
)后跟一个或多个非关闭标记([^>]+
),不合理地(?
)后跟等号(=
)全部捕获作为第一组((...)
),然后是第二组((...)
),而不是单引号或双引号或空格([^"'\s]
),后跟不是空格或关闭标记({{1} })一次或多次([^\s>]
),然后将其替换为第一个捕获的组(+
),然后将第二个捕获的组替换为单引号($1
)
例如循环:
'$2'
但这是解决问题的一种不好的方法。最好使用HTML解析器进行解析,然后根据需要重新格式化HTML。这将确保格式良好的HTML,正则表达式只能确保格式良好的HTML,如果输入完全符合预期。
答案 1 :(得分:1)
非常有帮助!我做了一些小改动,允许它将属性与单个字符值匹配:
/(<[^>]+?=)([^"'\s>][^\s>]*)/g
(将一个或多个+
更改为零或更多*
,并将>
添加到第二组中的第一个匹配项。)