Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript换行符替换_Javascript_Regex_Replace - Fatal编程技术网

javascript换行符替换

javascript换行符替换,javascript,regex,replace,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 ="back

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

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

多谢各位

解决方案 解释 正则表达式
/(^ |)color:\s*([^;]+)/
与字符串(^)开头或前缀为
的a颜色匹配。在以下情况下,它会失败:

"background-color:red; \n color:white;";
“颜色”的前缀是空白(\s)。在某些情况下,它也可能以换行符(\n)作为前缀

因此,为了在这些情况下进行匹配,可以使用正则表达式
(^ |[;\n\s]+)颜色:\s*([^;]+)
。它在四种情况下匹配“颜色”字符串:

  • 在字符串开头:
    “color:white;”
  • 前缀为
    “背景色:红色;颜色:白色;”
  • 以一行或多行新行作为前缀:
    “\n颜色:白色;”
  • 前缀为一个或多个空格:
    颜色:白色;“
解决方案 解释 正则表达式
/(^ |)color:\s*([^;]+)/
与字符串(^)开头或前缀为
的a颜色匹配。在以下情况下,它会失败:

"background-color:red; \n color:white;";
“颜色”的前缀是空白(\s)。在某些情况下,它也可能以换行符(\n)作为前缀

因此,为了在这些情况下进行匹配,可以使用正则表达式
(^ |[;\n\s]+)颜色:\s*([^;]+)
。它在四种情况下匹配“颜色”字符串:

  • 在字符串开头:
    “color:white;”
  • 前缀为
    “背景色:红色;颜色:白色;”
  • 以一行或多行新行作为前缀:
    “\n颜色:白色;”
  • 前缀为一个或多个空格:
    颜色:白色;“

分号后(或字符串开头)但“color”前应允许空白。您还应在冒号前留出空格:

/(^|;|\n|\s+)color\s*:\s*([^;]+)/
您可能还需要考虑颜色属性是否是结束花括号之前的最后一个对象}:

/(^|;|\n|\s+)color\s*:\s*([^;}]+)/

您应该在分号(或字符串开头)之后但在“color”之前允许空白。您还应在冒号前留出空格:

/(^|;|\n|\s+)color\s*:\s*([^;]+)/
您可能还需要考虑颜色属性是否是结束花括号之前的最后一个对象}:

/(^|;|\n|\s+)color\s*:\s*([^;}]+)/

你有两个问题。首先,如果您想在搜索字符串中间的换行符匹配代码> ^ <代码>,则需要在ReGEXP上设置多行标记。其次,将“
\n
”(带空格)放在第二个
BodyContent
中。您的regexp不处理换行符后的空格

试试这个:

/((?:^|;)\s*)color:\s*([^;]+)/m
var dis = BodyContent.replace(/([\s;{]color:)\s*[^\s;}]+/, "$1green"); 

你有两个问题。首先,如果您想在搜索字符串中间的换行符匹配代码> ^ <代码>,则需要在ReGEXP上设置多行标记。其次,将“
\n
”(带空格)放在第二个
BodyContent
中。您的regexp不处理换行符后的空格

试试这个:

/((?:^|;)\s*)color:\s*([^;]+)/m
var dis = BodyContent.replace(/([\s;{]color:)\s*[^\s;}]+/, "$1green"); 
试试这个:

/((?:^|;)\s*)color:\s*([^;]+)/m
var dis = BodyContent.replace(/([\s;{]color:)\s*[^\s;}]+/, "$1green"); 
除非一次只处理一行文本,否则无需特别处理换行符。它只是另一个空白字符,您需要匹配其中任何一个;这就是
\s
的作用。也不需要匹配字符串的开头,因此不需要
^
锚点

但是,如果“color:”是规则中的第一个声明,则应允许使用大括号。例如:

H1{color:white;background-color:red;}
此外,鉴于这一有效规则:

H1{background-color:red;color:white }
…您的正则表达式将匹配
;颜色:白色}
并替换为
;颜色:绿色
,导致CSS无效。这就是为什么我将第二个字符类从
[^;]
更改为
[^\s;}]

尝试以下操作:

/((?:^|;)\s*)color:\s*([^;]+)/m
var dis = BodyContent.replace(/([\s;{]color:)\s*[^\s;}]+/, "$1green"); 
除非一次只处理一行文本,否则无需特别处理换行符。它只是另一个空白字符,您需要匹配其中任何一个;这就是
\s
的作用。也不需要匹配字符串的开头,因此不需要
^
锚点

但是,如果“color:”是规则中的第一个声明,则应允许使用大括号。例如:

H1{color:white;background-color:red;}
此外,鉴于这一有效规则:

H1{background-color:red;color:white }

…您的正则表达式将匹配
;颜色:白色}
并替换为
;颜色:绿色
,导致CSS无效。这就是为什么我将第二个字符类从
[^;]
更改为
[^\s;}]

如果
color
是搜索字符串中的第一项,则失败。如果
color
是搜索字符串中的第一项,则失败。