2017-04-06 33 views
1

此代碼:JS正則表達式匹配排除引號內

var value = 'one.two[0]["three.four"]'; 
console.log(value.split(/(?:\.)|(?=\[")/)); 

產生以下數組:

0: one 
1: two[0] 
2: ["three 
3: four"] 

如何修改它來排除引號內的點? 我希望得到如下的輸出:

0: one 
1: two[0] 
2: ["three.four"] 
+1

'\。(?!\ w *「\])'。 –

+2

看來你可以使用['str.match( /\w+(?:\[[^\][]*])?|\[[^\][]*]/g)'](https://regex101.com/r/gNa9ed/1)甚至是'\ w +(?:\ [[^ \] [] *])?| \ [「。*?」] | \ [[^ \] [] *]'。 –

回答

0

您可以.後添加負向前查找添加里面的「排除點引號「的邏輯。我們忽略開頭引用和前瞻性,看看我們是否在引用字符串內。 (其中我們假設這裏不包含像轉義引號\"任何古怪)

var value = 'one.two[0]["three.four.five"]'; 
console.log(value.split(/\.(?![\w.]*")|(?=\[")/)); 
-1

我想你可以用組合嘗試:

  • 負回顧後

    /(?<!not)foo/ 比賽:

    不是foo但是foo

  • 和負前瞻

    /foo(?!bar)/比賽:

    foobar的巴茲

問候

+0

請解釋爲什麼downvote .. .. – r1verside

+4

沒有downvote你,但可能是因爲缺乏的JavaScript像'lookbehinds支持(?<= ...)'(正)和'(?<!...)'(負) – Cama

+0

可能是因爲它不是一個答案。 – LorDex