2011-12-12 81 views
3

我有我需要拆分的各種字符串實例。以下是一些示例和所需的輸出方案。規則來分割也列出:在JavaScript中使用RegExp拆分字符串,忽略括號內的分隔符

實施例1:

input: 'filename.ext|someattributes' 
output array: 
    'filename.ext', 
    'someattributes' 

實施例2:

input: qualifier1[filename.ext|someattributes]|qualifier2[another_filename.ext|some_other_attributes] 
output array: 
    'qualifier1[filename.ext|someattributes]', 
    'qualifier2[another_filename.ext|some_other_attributes]' 

實施例3:

input: dummyqualifier|qualifier1[filename.ext|someattributes] 
output array: 
    'dummyqualifier', 
    'qualifier1[filename.ext|someattributes]' 

規則很簡單。使用'|'分割字符串僅當它不出現在方括號內時才作爲分隔符。注意:該字符串可能沒有任何方括號。輸入字符串中沒有空格。

我正在尋找JavaScript解決方案,因爲這是針對node.js模塊的。

回答

2

此正則表達式應該爲你所描述的情況下工作:

/\|(?!(?:\w+\|?)+])/ 

下面是一個例子它正在運行:http://jsfiddle.net/UFq3h/1/(您需要打開控制檯才能看到結果)。

原油解釋:任意|字符不是其後是(單詞字符或|其次是])。如果你需要一個更精確的解釋發表評論,我會盡量讓它更清晰。

編輯:感謝Lolo的改進版本,它處理用例中的最後一個示例。

+0

謝謝draevor。這很好。我想我明白它是如何工作的。 –

1

我想不出正則表達式的權利,但你可以這樣做:

function doSplit(input) { 
    var tmp = input.split('|'); 

    var result = []; 
    for (var i = 0, j = 0; i < tmp.length; i++) { 
     result[j] = (result[j] ? result[j] + '|' : '') + tmp[i]; 
     if (result[j].indexOf('[') == -1 || result[j].indexOf(']') != -1) { 
      j++; 
     } 
    } 

    return result; 
} 

var i = 'qualifier1[filename.ext|someattributes]|qualifier2[another_filename.ext|some_other_attributes]'; 
var o = doSplit(i); 
+0

謝謝洛洛,感謝您的快速回復。 –

相關問題