2010-09-25 82 views
1
filter -n ""function(file) { return file.owner == "john"; }"" 

應該被解析成下面的數組:如何使用正則表達式和javascript分裂以下命令到令牌:

[ 'filter', 
    '-n', 
    'function(file) { return file.owner == "john"; }' ] 
+4

不可能單獨正則表達式。編寫一個解析器。 – Tomalak 2010-09-25 21:56:21

+2

如何使用超強膠水裝飾這幅畫?是否有一個特定的原因,你想使用正則表達式,這不是他最好的工具。 – Turtle 2010-09-25 22:19:21

+0

@Tomalak對於一個足夠特殊的「常規」表達式... ;-) – 2010-09-25 22:27:29

回答

1

我不完全知道你想怎麼處理雙引號。你是否還希望能夠在每一端都只用一個雙引號來處理字符串,還是引號總是加倍?

var string = 'filter -n ""function(file) { return file.owner == "john"; }""'; 
var regex = /([^"\s]+)|""(.*?)""/g; 
var match; 
var result = []; 

while (match = regex.exec(string)) { 
    result.push(match[1] || match[2]); 
} 

alert(result); 

結果:

filter,-n,function(file) { return file.owner == "john"; } 
+0

將始終有2個雙引號包圍字符串。我猜,如果我在字符串周圍使用1個雙引號,我需要將字符串中的引號轉義 – Shahriar 2010-09-25 22:25:10

+0

var regex =/([^"\s]+)|""(.*?)""/g,匹配; //匹配意味着什麼? – Shahriar 2010-09-25 22:34:50

+0

@Shahriar:他只是將'match'預先定義爲一個變量,懶惰並且全部都在一行上。 – 2010-09-25 22:38:27