我有 html 元素作为字符串,我必须在每个 ';' 之前添加“!important”如果还不存在。
我正在使用这个正则表达式:
/[^!important(\s*)];(?=[^<>]+:|\s*")/g
让我们对这个正则表达式进行切片,第一部分:
[^!important(\s*)];
检查“;”之前是否没有“!important”。
里面的 (\s*)
允许在“!important”和“;”之间添加空格。
正则表达式的第二部分:
(?=[^<>]+:|\s*")
我不确定,但我相信它能找到所有的“;”在字符串中。
最后,我使用 javascript 'replace' 来进行此更改。
var str3 = str.replace(/[^!important(\s*)];(?=[^<>]+:|\s*")/g, '!important;')
我使用了这里提出的问题: regex matching !important styles 经过一些更改,我得到了以下结果: https://jsfiddle.net/7bhmjapL/19/
几个问题:
此正则表达式查找“;”不是跟在“!important”之后,但它标记了“;”以及之前出现的一个 Angular 色。例如:
"color:yellow;"
-> 它标记:"w;"
。进一步的第一个问题 - 如果我在“yellow”和“;”之间有空格,如下所示:
“color:yellow ;”
,它不会被识别为字符串我必须添加“!重要”。
我尝试使用空格,允许添加\t、\s,删除它们,并进行了很多尝试但没有成功。主要问题是正则表达式标记了 2 个字符,而不仅仅是分号。
最佳答案
您应该从另一面看问题 - 删除可选的现有 !important
并在行末尾添加 !important
:
str.replace(/\s*(!important)?\s*;/g, ' !important;')
关于javascript - 正则表达式 在分号之前添加 !important (如果不存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32201939/