2016-11-27 38 views
1

我想獲得一個屬性的數組,我分裂的空白字符。除了涉及名稱空間時,我的工作正常。下面是我的示例代碼:如何在名稱和值之間存在空格字符時獲取屬性數組?

XML:

<?xml version="1.0" encoding="utf-8"?> 
<s:node something xmlns:s = "library://ns.adobe.com/flex/spark" 
xmlns:b='testnamespace.com' xmlns="noprefix.com"></node> 

Exmascript:

var xmlString:String = 'something xmlns:s = "library://ns.adobe.com/flex/spark" xmlns:b='testnamespace.com' xmlns="noprefix.com"'; 
var attributes:Array = xmlString.split(/\s+/g); 

這導致該數組的項目中:

- something 
- xmlns:s 
- = 
- "library://ns.adobe.com/flex/spark" 
- xmlns:b='testnamespace.com' 
- xmlns="noprefix.com" 

我將如何分割的屬性了當名稱和值之間有空格時?

PS:
我有一個XML解析器,但由於名稱空間不匹配而引發錯誤。所以我必須解析屬性並刪除或修復無效的名稱空間,然後我可以將它傳遞給XML字符串。

PSS:
我只需要使用第一個標籤來添加命名空間。我沒有做任何其他的字符串操作。

+0

使用XML解析器來代替。 JavaScript正則表達式不夠強大,無法正確解析XML。 – Ryan

+0

我有一個XML解析器,但由於名稱空間不匹配而引發錯誤。所以我必須解析這些屬性並刪除或修復無效的命名空間。 PS我只需要使用第一個標籤來添加命名空間。我沒有做任何其他的字符串操作。 –

+3

我認爲不要使用正則表達式,你最好使用替換'.replace('=','=')。replace('=','=')' –

回答

1

正則表達式爲你的分裂,負前瞻:

split(/\s+(?!=|"|')/g

結果:

Array[4] 
0:"something" 
1:"xmlns:s = "library://ns.adobe.com/flex/spark"" 
2:"xmlns:b="testnamespace.com"" 
3:"xmlns="noprefix.com"" 
+0

我的朋友是一個初學者,他想知道'(?!= |「|')'做什麼? –

+1

檢查空格後是否有'=','''','''。如果發現其中一個符號,模式不匹配,函數將不會在那個位置分割,如果可以的話會更好在空格(lookbehind)之前檢查'=',而不是使用''''和''',但是因爲我知道lookbehind不能在javascript regexp中工作。 現場演示:https://regex101.com/r/Y4BqLg/2 –

相關問題