1
votes

Remplacement de [TD] par en Javascript

J'ai une chaîne de données de retour d'un processus Oracle qui génère [TD] et [/ TD] plutôt que et pour désigner une cellule de tableau html. Je dois traduire [TD] en et [/ TD] en dans un élément avec un ID de valeurs inchangées en utilisant Javascript.

J'ai cherché et recherché sur Google ici et c'est le plus proche que j'ai jusqu'à présent, ni l'un ni l'autre ne fonctionnent. Toute aide ici serait très appréciée.

function substituteValues() {

  const str = document.getElementById('unchangedValues').innerHTML;
  const res1 = str.replace(/\[TD\]/g, '\<TD\>');

  document.getElementById('unchangedValues').innerHTML = res1;
}

et j'ai également essayé:

function strReplace() {
    var string = document.getElementById('unchangedValues').innerHTML;
    var res1 = string.replace(/(\[)|(\])/g, function(match, p1, p2) {
  if (p1) return "<";
  if (p2) return ">"
});
}

Merci p >


4 commentaires

Utilisez .replace (/ \ [(\ /? TD)] / g, '<$ 1>')


Cela ressemble à un doublon de base: stackoverflow.com/questions/1144783/...


@isherwood pourrait l'être, mais OP utilise g .


Est-ce que quelque chose fonctionne pour vous?


5 Réponses :


0
votes

Solution générique pour n'importe quelle balise, pas seulement [TD] :

console.log(
  'Lorem [TD FOO="ipsum"] dolor sit [/TD] amet'
  .replace(/\[([^\]]+)\]/g, '<$1>')
);


6 commentaires

Pourquoi les regexes du tout?


@isherwood Parce que c'est ainsi que vous pouvez remplacer toutes les occurrences


C'est vrai mais la question ne mentionne pas qu'il peut s'agir de [td]


Dans ce cas, la réponse sera toujours [TD] mais une réponse sensible à la casse serait également bonne.


Ce sont des gars formidables, merci. Je vais essayer ces réponses au cours des prochaines heures et ensuite faire des commentaires. Super truc, merci!


@enCue Vous pourriez continuer à obtenir de nouvelles réponses plus rapidement que vous ne pouvez les essayer



0
votes

Que diriez-vous de cela avec 2 str.replace () uniquement pour les crochets?

var str = 'John [TD] Smith [/TD]';
var newstr = str.replace(/\[/gi, '<').replace(/]/gi,'>');
console.log(newstr);


0 commentaires

2
votes

Vous pouvez utiliser

// Assuming values can't contain ] and " are value qualifiers
console.log( '[TD key="value"] and [/TD]'.replace(/\[(\/?TD(?:\s[^\]]*)?)]/gi, '<$1>') );
// Assuming values can contain ] and " or ' are value qualifiers
console.log( '[TD key="va[l]ue here" key2=\'value 2\' auto ] and [/TD]'.replace(/\[(\/?TD(?:\s+\w+(?:=(?:"[^"]*"|'[^']*'|\w+))?)*)\s*]/gi, '<$1>') );

Les expressions régulières / \ [(\ /? TD)] / gi correspondent

  • \ [ - a [
  • (\ /? TD) - Groupe 1: / 1 ou 0 fois puis TD
  • ] - un ] caractère
  • / gi - occurrences multiples, insensible à la casse.

S'il y a des attributs dans TD , utilisez

console.log(
   "[TD] and [/TD]".replace(/\[(\/?TD)]/gi, '<$1>')
)


0 commentaires

0
votes

Si votre id est sur un élément table ou même un élément tr et que le format n'est pas correct (je ne sais pas puisque vous n'avez pas publié le HTML), le navigateur déplacera les éléments non valides en dehors de la table (ou de l'emplacement valide le plus proche). Vous pouvez voir que lors de l'exécution, il n'y a pas de données dans le tr et cela fait que votre code tente de formater une chaîne vide puis de sauvegarder la chaîne vide.

<table id="unchangedValues">
  <tr>
  </tr>
</table>
let str = `[TD]Hi[/TD] 
    [TD]Hi[/TD] 
    [TD]Hi[/TD] 
    [TD]Hi[/TD]`
    
document.querySelector('#unchangedValues tr').innerHTML = str.replace(/\[(\/?TD)\]/g, '<$1>')

Comme vous pouvez le voir par la sortie, les [TD] et [/ TD] ont tous disparu du tableau, cependant si vous inspecter la sortie, les valeurs auront été déplacées au-dessus ou en dessous du tableau automatiquement par le navigateur.

Pour résoudre le problème, vous devez avoir les éléments en mémoire. Vous pouvez ensuite modifier les éléments et les enregistrer dans le tableau.

<table id="unchangedValues">
  <tr>
    [TD]Hi[/TD]
    [TD]Hi[/TD]
    [TD]Hi[/TD]
    [TD]Hi[/TD]
  </tr>
</table>
console.log(document.getElementById('unchangedValues').innerHTML)


0 commentaires

0
votes

vous pouvez également vérifier un remplacement avec le regExp de Wiktor Stribiżew

if(str.indexOf('[TD]')!==-1 || str.indexOf('[/TD]')!==-1){str = str.replace(/\[(\/?TD)]/gi, '<$1>')}


0 commentaires