我有一个正则表达式来替换给定字符串中的color
值,当没有如下所示的换行符时,它正常运行...
var BodyContent = "background-color:red;color:white";
// NOTE : there is no new line constant
var dis = BodyContent.replace(/(^|;)color:\s*([^;]+)/, "$1color:" + 'green');
//returns dis ="background-color:red;color:green"; //Works well
但是这样的话不行吗
BodyContent = "background-color:red; \n color:white;"; // Note the newline constant
var dis = BodyContent.replace(/(^|;)color:\s*([^;]+)/, "$1color:" + 'green');
//returns dis = "background-color:red;color:white"; there is no change.the color is still white
这是我的正则代码,用于替换颜色值/(^|;)color:\s*([^;]+)/
。
现在我该如何处理这条新线?
谢谢。
答案 0 :(得分:2)
你有两个问题。首先,如果希望^
在搜索字符串中间的换行符后匹配,则需要在正则表达式上设置多行标记。其次,在第二个\n
中加上“BodyContent
”(带空格)。你的正则表达式不会处理换行符之后的空格。
试试这个:
/((?:^|;)\s*)color:\s*([^;]+)/m
答案 1 :(得分:1)
var dis = BodyContent.replace(/(^|[;\n\s]+)color:\s*([^;]+)/, "$1color:" + 'green');
您的正则表达式/(^|;)color:\s*([^;]+)/
匹配一个颜色,该颜色是字符串的开头(^)或带有;
的前缀。在以下情况下失败:
"background-color:red; \n color:white;";
'color'是空格(\ s)的前缀。在某些情况下,它也可能以换行符为前缀(\ n);
"background-color:red; \ncolor:white;";
因此,要在这些情况下匹配,请使用正则表达式(^|[;\n\s]+)color:\s*([^;]+)
。它在四种情况下匹配'color'字符串:
"color:white;"
;
为前缀:"background-color:red;color:white;"
"\ncolor:white;"
" color:white;"
答案 2 :(得分:1)
您应该在分号(或字符串的开头)之后但在“color”之前允许空格。你也应该在冒号之前允许空格:
/(^|;|\n|\s+)color\s*:\s*([^;]+)/
如果color属性是关闭花括号之前的最后一项,你可能还想允许:
/(^|;|\n|\s+)color\s*:\s*([^;}]+)/
答案 3 :(得分:0)
试试这个:
var dis = BodyContent.replace(/([\s;{]color:)\s*[^\s;}]+/, "$1green");
除非您一次处理一行文本,否则无需专门处理换行符。它只是另一个空白角色,你需要匹配其中任何一个;这就是\s
的用途。也无需匹配字符串的开头,因此您不需要^
锚点。
但是,如果“color:”是规则中的第一个声明,则应该允许使用左括号。例如:
H1{color:white;background-color:red;}
此外,鉴于此有效规则:
H1{background-color:red;color:white }
...您的正则表达式将匹配;color:white }
并将其替换为;color:green
,从而导致CSS无效。这就是为什么我将第二个字符类从[^;]
更改为[^\s;}]
。