2017-04-06 48 views
0
function convertHTML(str) { 
    var objA={'&':'&​amp;','<':'&​lt;','>':'&​gt;','\'':'&​apos;','"':'\&​quot;'} 
    var matchStr = str.match(/([&|''|""|>|<])/g) 
    var matchStr1='' 
    for(var i=0; i<matchStr.length; ++i){ 

    matchStr1 = str.replace(matchStr[i], objA[matchStr[i]]) 

    } 
    return matchStr1; 
} 

console.log(convertHTML("Hamburgers < Pizza < Tacos ")); 

我得到的輸出是Hamburgers &​lt; Pizza < Tacos。我想Hamburgers &​lt; Pizza &​lt; Tacos。那麼是否有可能使用這段代碼進行一些更改來替換第二次出現?正則表達式:如何用對象替換第二次出現?

+0

'[&|'| 「」 |> | <]'無效 - 你可以在字符類的內部不備用 – sweaver2112

+0

有趣的,但沒有得到結果你在期待什麼?可能有一些更簡單的方法 –

回答

1

我建議你使用下面的方法。

var objMap = {    // ===> object with specified keys 
 
    '&': '&​amp;',   // ===> that have to be replaced 
 
    '<': '&​lt;',    // ===> with their corresponding values 
 
    '>': '&​gt;', 
 
    '\'': '&​apos;', 
 
    '"': '\&​quot;' 
 
} 
 

 
function convertHTML(str) { 
 
    var res = str.replace(/[&<>\\"]/g, match => objMap[match]); 
 
    return res; 
 
} 
 

 
console.log(convertHTML("Hamburgers < Pizza < Tacos "));

0

的問題是在行:

matchStr1 = str.replace(matchStr[i], objA[matchStr[i]]) 

在每次迭代 「STR」 是永遠不變的。

您的代碼固定:

function convertHTML(str) { 
    var objA={'&':'&​amp;','<':'&​lt;','>':'&​gt;','\'':'&​apos;','"':'\&​quot;'} 
    var matchStr = str.match(/([&|''|""|>|<])/g); 
    for(var i=0; i<matchStr.length; ++i){ 
    str = str.replace(matchStr[i], objA[matchStr[i]]) 
    } 
    return str; 
} 
console.log(convertHTML("Hamburgers < Pizza < Tacos "));