2017-04-06 12 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がほしいです。それで、このコードを使って2回目のオカレンスをいくつかの変更で置き換えることは可能ですか?RegExp:オブジェクトを使って2番目のオカレンスを置き換える方法は?

+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

問題はラインである:各反復 "STR" で

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

は常に同じです。

あなたのコード固定:

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 ")); 
関連する問題