2014-02-05 38 views
0

我有,我想使用類似<example if="x<5" />JavaScript的正則表達式來捕獲<在XML屬性

<是屬性的非法字符基於XML的腳本語言,所以XML解析器拋出錯誤。

我仍然喜歡在不逃避的情況下使用它,它對人類來說比x&lt;=5更好讀寫x<=5

所以我想預先處理XML它被解析之前,用&lt;

替換無效<但我不能想出一個正則表達式。我一直在嘗試兩個小時。

我已經到達了遠處="(.*?)"以匹配屬性中的所有內容,但我只想讓那該死的<="(<)"不這樣做。

+4

http://stackoverflow.com/a/1732454/576139 –

+0

也許你應該使用更先進的XML編輯器,它不要求你編輯文本的水平。 – BiAiB

+1

我不知道文本的整個結構,但[this](http://jsfiddle.net/ht8xP/)適用於您提供的示例。警告:由於正則表達式不適合解析XML,因此可能無法完全工作。 – Jerry

回答

0

因此,首先,強制性的鏈接,告訴你不要這樣做:
https://stackoverflow.com/a/1732454/505154

有了這樣的方式,這裏是你可以做你正在嘗試做的..

你可以使用函數替換String對象的replace()方法,所以我將首先使用當前的正則表達式匹配屬性,然後替換每個匹配項中的每個<。例如:

function escapeLtGt(str) { 
    return str.replace('<', '&lt;').replace('>', '&gt;'); 
} 

function escapeLtGtInXmlAttrs(str) { 
    return str.replace(/="(.*?)"/g, escapeLtGt); 
} 

// example, logs '<example if="x&lt;5" />' 
console.log(escapeLtGtInXmlAttrs('<example if="x<5" />')); 
+0

謝謝。這也是我的解決方案。我認爲有一種方法可以得到'<',但顯然沒有。 – user3195878