2013-04-22 17 views
15

Diciamo che recuperare il valore di un <textarea> utilizzando jQuery. Come posso quindi sostituire una parte del valore utilizzando JavaScript/jQuery. Per esempio:JavaScript/jQuery String Sostituisci con Regex

stringa: "Hey I'm $$zach$$"

sostituire $$zach$$ con <i>Zach</i>

E ancora mantenere intatto il resto della stringa?

+0

vedo che hai utilizzato '' < ecc nel tuo esempio. Vuoi usare '<' o '<'? – timss

risposta

31

Utilizzare una regex sostituire:

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

Spiegazione del regex:

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

Il gruppo di cattura viene poi utilizzato nella stringa '<i>$1</i>'. $1 fa riferimento al gruppo che la regex ha catturato.

+0

cosa fare se, ad esempio, I "$$ hi hi $$" deve essere sostituito? – Zach

+0

@ user2059479 ok, corretto – Doorknob

+0

Non dimenticare "g" dopo "/". Ha funzionato quando ho aggiunto solo questa lettera. –

3

Utilizzando il metodo della stringa .replace farà.

.replace(/\$\$(.*?)\$\$/g, '<I>$1</I>') 
+2

-1 per nessun collegamento al riferimento regex jQuery –

8

Utilizzare questa:

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

Se si voleva qualcosa in jQuery:

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

Markup:

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

jsFiddle

avvolgerla in una funzione per il miglior uso:

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

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

Sembra come si vuole fare una sintassi simile a Markdown. Perché non usare solo un parser Markdown per i tuoi campi invece di reinventare la ruota?

Showdown JS è attivamente sviluppato e si ottiene la stessa sintassi Markdown come con qualsiasi altra sintassi Markdown.

2

Utilizzare questo, collegamento cambiamento e tag per la funzione Linkify estesa:

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