J'ai une chaîne de données de retour d'un processus Oracle qui génère 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. et j'ai également essayé: Merci p > [TD]
et [/ TD]
plutôt que
pour désigner une cellule de tableau html. Je dois traduire et [TD]
en et [/ TD]
en dans un élément avec un ID de valeurs inchangées en utilisant Javascript. function substituteValues() {
const str = document.getElementById('unchangedValues').innerHTML;
const res1 = str.replace(/\[TD\]/g, '\<TD\>');
document.getElementById('unchangedValues').innerHTML = res1;
}
function strReplace() {
var string = document.getElementById('unchangedValues').innerHTML;
var res1 = string.replace(/(\[)|(\])/g, function(match, p1, p2) {
if (p1) return "<";
if (p2) return ">"
});
}
5 Réponses :
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>') );
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
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);
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>') )
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)
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>')}
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?