2009-11-05 20 views
2

目前我有一個基本的JavaScript正則表達式用一個分號替換字符串中的所有空格。字符串中的某些字符包含引號。理想情況下,我希望用引號內的空格除外用分號代替空格。Javascript正則表達式

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

感謝 羅賓

回答

11

嘗試是這樣的:

"ab \" cd" ef "gh ij" 
+0

很聰明。我喜歡。試圖打破它沒有成功。 –

+0

謝謝蒂姆。我更新了一個案子,當它會中斷。但OP沒有提及可能發生的逃脫報價。 –

+0

好點。你可以這樣做: '\ s +(?=((?:\\「| [^」])*(?<!\\)「(?:\\」| [^「])* (?<!\\)「)*(?:\\」| [^「])* $)' 但現在*真的*很難受。 –

2

在這種情況下:

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); 
+0

你要交換'[^「]'和'\\」'。否則,作爲轉義的反斜槓被「[^」]'「吃掉」,或者在否定的字符類中加入反斜槓。除此之外,你的方法是一種更直觀的方法(並且在轉義字符的情況下,一個工作解決方案)+1 –

+0

謝謝你指出。 – 2009-11-05 14:38:24

2
在JavaScript

,你可以輕鬆地更換看中與回調

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

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