[英]javascript regular expression to replace special characters, but allow a whitelist, using xregexp
[英]Using regular expression to replace special characters outside of html tags
我正在嘗試查找並替換一些特殊的html實體,即'&'轉換為&
和'>'轉換為>
。 這是用於電子郵件構建器工具,某些較舊的客戶端需要將字符替換為html實體。
用戶通過字符串傳遞,而我使用javascript遍歷對象數組。 這將找到一個字符並將其替換為正確的html實體。
您可以在這里查看我使用的正則表達式代碼:
https://regex101.com/r/WZh5tA/2
escapeCharacter: function(string){
var replaceChar = [
{reg : '&', replace: '&'},
{reg : '"', replace: '"'},
{reg : '£', replace: '£'},
{reg : '€', replace: '€'},
{reg : 'é', replace: 'é'},
{reg : '–', replace: '–'},
{reg : '®', replace: '®'},
{reg : '™', replace: '™'},
{reg : '‘', replace: '‘'},
{reg : '’', replace: '’'},
{reg : '“', replace: '“'},
{reg : '”', replace: '”'},
{reg : '#', replace: '#'},
{reg : '©', replace: '©'},
{reg : '@', replace: '@'},
{reg : '$', replace: '$'},
{reg : '\\(', replace: '('},
{reg : '\\)', replace: ')'},
{reg : '<', replace: '<'},
{reg : '>', replace: '>'},
{reg : '…', replace: '…'},
{reg : '-', replace: '-'},
{reg : "'", replace: '''},
{reg : '\\*', replace: '*'},
{reg : ',', replace: '‚'}
];
var s = string;
replaceChar.forEach(function(obj){
var regEx = new RegExp(obj.reg+"(?!([^<]+)?>)", "g");
s = s.replace(regEx, obj.replace);
});
return s
}
當用戶傳遞帶有html標記的字符串(應允許這樣做)時,就會發生此問題。 例如,字符串可以是:
'This is an example of some <b>bold</b> text'
我的查找和替換工具很神奇,但是我想我丟失了一些東西,因為我得到了以下輸出:
'This is an example of some <b>bold</b> text'
您可以使用
s = s.replace(
new RegExp("(<[^<>]*>)|" + obj.reg.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), "g"),
function ($0, $1) { return $1 ? $0 : obj.replace }
);
筆記:
obj.reg
,因此.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&')
為必填項 (<[^<>]*>)|
可選匹配,並在所需匹配之前捕獲到組1 <...>
子字符串中,並在作為替換參數傳遞的回調方法中檢查第一個組是否匹配。 如果匹配,則將整個匹配照原樣返回,否則將進行替換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.