Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.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,目前,我在javascript中有一个基本的正则表达式,用于用分号替换字符串中的所有空格。字符串中的某些字符包含引号。理想情况下,我想用分号代替空格,但引号内的空格除外 var stringin = "\"james johnson\" joe \"wendy johnson\" tony"; var stringout = stringin.replace(/\s+/g, ":"); alert(stringout); 谢谢 罗宾试试这样: var stringin = "\"james j

目前,我在javascript中有一个基本的正则表达式,用于用分号替换字符串中的所有空格。字符串中的某些字符包含引号。理想情况下,我想用分号代替空格,但引号内的空格除外

var stringin = "\"james johnson\" joe \"wendy johnson\" tony";
var stringout = stringin.replace(/\s+/g, ":");
alert(stringout);
谢谢
罗宾

试试这样:

var stringin = "\"james johnson\" joe \"wendy johnson\" tony";
var stringout = stringin.replace(/\s+(?=([^"]*"[^"]*")*[^"]*$)/g, ":");
请注意,当字符串中有转义引号时,它将中断:

"ab \" cd" ef "gh ij"

在这种情况下,单靠正则表达式并不是最简单的方法:

<html><body><script>

var stringin = "\"james \\\"johnson\" joe \"wendy johnson\" tony";
var splitstring = stringin.match (/"(?:\\"|[^"])+"|\S+/g);
var stringout = splitstring.join (":");
alert(stringout);

</script></body></html>

在javascript中,您可以轻松地使用回调进行奇特的替换

    var str = '"james \\"bigboy\\" johnson" joe "wendy johnson" tony';

    alert(
        str.replace(/("(\\.|[^"])*")|\s+/g, function($0, $1) { return $1 || ":" })
    );

非常聪明。我喜欢。我试图打破它,但没有成功。谢谢蒂姆。我更新了一个箱子,它什么时候会坏。但是OP没有提到可能会出现转义引号。这一点很好。你可以这样处理:
\s+(?=((?:\\“[^”])*(?但是现在这真的很麻烦。是的,但是在结束引号之前有转义反斜杠的字符串呢:
ab“cd ef\”gh
?当转义字符开始使用时,是时候离开regex land了。哦,还有b.t.w.,JavaScript不支持向后看,只支持向前看。您需要交换
[^”]
\\\\“
。否则,作为转义的反斜杠会被
[^”]
。或者在否定字符类中添加反斜杠。除此之外,您的方法是更直观的方法(对于转义字符,这是一个有效的解决方案)。+1
    var str = '"james \\"bigboy\\" johnson" joe "wendy johnson" tony';

    alert(
        str.replace(/("(\\.|[^"])*")|\s+/g, function($0, $1) { return $1 || ":" })
    );