2017-04-06 10 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 ")); 

Ausgabe, die ich bekomme, ist Hamburgers &​lt; Pizza < Tacos. Ich möchte Hamburgers &​lt; Pizza &​lt; Tacos. Ist es also möglich, das zweite Auftreten mit diesem Code durch einige Änderungen zu ersetzen?RegExp: Wie das zweite Vorkommen mit Objekt ersetzen?

+0

'[& | '' | "" |> | <]' ist nicht gültig - Sie können keine alternativen innerhalb einer Zeichenklasse – sweaver2112

+0

Interessant, aber nicht das Ergebnis bekommen Sie erwarten und wofür? Vielleicht gibt es einen einfacheren Weg –

Antwort

1

Ich würde vorschlagen, dass Sie folgenden Ansatz verwenden.

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

Das Problem ist in Zeile:

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

In jeder Iteration "str" ​​ist immer gleich.

Ihr Code festgelegt:

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 ")); 
Verwandte Themen