与特定css声明匹配的正则表达式,带或不带可选分号

时间:2017-04-14 21:33:38

标签: regex

我需要使用普通的旧JavaScript从内联样式属性中删除特定的css声明。正则表达式似乎是一个很好的工具。事实上,这样做:

#font-family.*?;#

但是,当只有一个减速或一系列减速时的最后一个减速时,后面的分号是可选的。

我尝试了很多东西,例如:

#font-family.*?[;]##
#font-family.*?;?##
#font-family.*?;{0,1}##

所有未能做正确的事情,给出以下字符串:

style="font-family: sans-serif; font-size:10em; font-weight:normal;"
style="font-size:10em; font-weight:normal; font-family: sans-serif "
style="font-size:10em; font-weight:normal; font-family: sans-serif"
style="font-family: sans-serif;"
style="font-family: sans-serif"

将返回:

style="font-size:10em; font-weight:normal;"
style="font-size:10em; font-weight:normal;"
style="font-size:10em; font-weight:normal;"
style=""
style=""

分别

如何修改我的正则表达式以包括缺少尾随分号的情况?

2 个答案:

答案 0 :(得分:1)

对于发布的字符串,以下正则表达式将起作用:

\s*font-family:[^;"]*;?\s*

请参阅regex demo

<强>详情:

  • \s* - 0+ whitespaces
  • font-family: - 文字文字
  • [^;"]* - 零个或多个其他字符;"
  • ;? - 可选的;
  • \s* - 0+ whitespaces

答案 1 :(得分:0)

你会考虑font-family[^;]*;?(?>")吗? 我对css不熟悉,但看起来您希望在;字符串中捕获; - 分隔(不"..." - 终止)规范之一,并且你不想匹配收盘"。通过对"进行前瞻(非消耗)匹配来避免后者。