javascript换行

时间:2011-11-23 05:40:24

标签: javascript regex replace

我有一个正则表达式来替换给定字符串中的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*([^;]+)/

  

现在我该如何处理这条新线?

谢谢。

4 个答案:

答案 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;}]