目前我有一個基本的JavaScript正則表達式用一個分號替換字符串中的所有空格。字符串中的某些字符包含引號。理想情況下,我希望用引號內的空格除外用分號代替空格。Javascript正則表達式
var stringin = "\"james johnson\" joe \"wendy johnson\" tony";
var stringout = stringin.replace(/\s+/g, ":");
alert(stringout);
感謝 羅賓
目前我有一個基本的JavaScript正則表達式用一個分號替換字符串中的所有空格。字符串中的某些字符包含引號。理想情況下,我希望用引號內的空格除外用分號代替空格。Javascript正則表達式
var stringin = "\"james johnson\" joe \"wendy johnson\" tony";
var stringout = stringin.replace(/\s+/g, ":");
alert(stringout);
感謝 羅賓
嘗試是這樣的:
"ab \" cd" ef "gh ij"
在這種情況下:
var stringin = "\"james johnson\" joe \"wendy johnson\" tony";
var stringout = stringin.replace(/\s+(?=([^"]*"[^"]*")*[^"]*$)/g, ":");
請注意,當你的字串被轉義的引號將打破正則表達式並不是最簡單的方法:
<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>
這裏包含\\"
複雜的正則表達式是爲想要逃脫喜歡引用的字符串內\"
報價也工作的情況。如果你不需要,在第四線可以簡化爲
var splitstring = stringin.match (/"[^"]+"|\S+/g);
你要交換'[^「]'和'\\」'。否則,作爲轉義的反斜槓被「[^」]'「吃掉」,或者在否定的字符類中加入反斜槓。除此之外,你的方法是一種更直觀的方法(並且在轉義字符的情況下,一個工作解決方案)+1 –
謝謝你指出。 – 2009-11-05 14:38:24
,你可以輕鬆地更換看中與回調
var str = '"james \\"bigboy\\" johnson" joe "wendy johnson" tony';
alert(
str.replace(/("(\\.|[^"])*")|\s+/g, function($0, $1) { return $1 || ":" })
);
很聰明。我喜歡。試圖打破它沒有成功。 –
謝謝蒂姆。我更新了一個案子,當它會中斷。但OP沒有提及可能發生的逃脫報價。 –
好點。你可以這樣做: '\ s +(?=((?:\\「| [^」])*(?<!\\)「(?:\\」| [^「])* (?<!\\)「)*(?:\\」| [^「])* $)' 但現在*真的*很難受。 –