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
是搜索字符串中的第一项,则失败。