Javascript正则表达式
目前,我在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
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 || ":" })
);