web-dev-qa-db-fra.com

Chaîne JavaScript / jQuery remplacée par Regex

Disons que je récupère la valeur d'un <textarea> en utilisant jQuery. Comment puis-je remplacer une partie de la valeur à l'aide de JavaScript/jQuery. Par exemple:

chaîne: "Hey I'm $$zach$$"

remplacer $$zach$$ avec <i>Zach</i>

Et garder le reste de la chaîne intact?

22
Zach

Utilisez un regex remplacer:

yourTextArea.value = yourTextArea.value.replace(/\$\$(.+?)\$\$/, '<i>$1</i>')

Explication de l'expression régulière:

\$\$  two dollar signs
(     start a group to capture
.     a character
+     one or more
?     lazy capturing
)     end the group
\$\$  two more dollar signs

Le groupe de capture est ensuite utilisé dans la chaîne '<i>$1</i>'. $1 fait référence au groupe que le regex a capturé.

43
Doorknob

Utilisez ceci:

str.replace(/\${2}(.*?)\${2}/g, "<I>$1</I>");
\${2} matches two $ characters
(.*?) matches your string to be wrapped
\${2} same as above
/g matches globally

jsFiddle

Si vous vouliez quelque chose dans jQuery:

$("#txt").val().replace(/\${2}(.*?)\${2}/g, "<I>$1</I>");

Balisage:

<textarea id="txt">I'm $$Zach$$</textarea>

jsFiddle

Enveloppez-le dans une fonction pour une meilleure utilisation:

var italics = function (str) {
    return str.replace(/\$\$(.*?)\$\$/g, "<I>$1</I>");
}

italics($("#txt").val());

Il semble que vous souhaitiez créer une syntaxe similaire à Markdown. Pourquoi ne pas simplement utiliser un analyseur Markdown pour vos champs au lieu de réinventer la roue?

Showdown JS est activement développé et vous obtenez la même syntaxe Markdown qu'avec toute autre syntaxe Markdown.

13
SomeShinyObject

Utilisation de la chaîne .replace la méthode fera l'affaire.

.replace(/\$\$(.*?)\$\$/g, '<I>$1</I>')
3
Explosion Pills

Utilisez ceci, changez le lien et la balise pour la fonction linkify étendue:

String.prototype.linkify = function() {
    var wikipediaPattern = /<wikipedia>(.+?)<\/wikipedia>/g; 
    return this.replace(wikipediaPattern, '<a href="http://fr.wikipedia.org/wiki/$1">$1</a>');
}
3
Nicolas Vannier