2013-04-22 13 views
15

Powiedzmy, że pobieram wartość <textarea> przy użyciu jQuery. Jak mogę następnie zastąpić część wartości za pomocą JavaScript/jQuery. Na przykład:Łańcuch JavaScript/jQuery Zastąp symbol Regex

ciąg: "Hey I'm $$zach$$"

zastąpić $$zach$$ z <i>Zach</i>

I nadal zachować resztę napisu nienaruszone?

+0

widzę, że użyłeś '' < etc w swoim przykładzie. Czy chcesz użyć '<' lub '<'? – timss

Odpowiedz

31

pomocą regex wymienić:

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

Objaśnienie regex:

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

grupa wychwytu jest następnie wykorzystywany w ciągu '<i>$1</i>'. $1 odnosi się do grupy, którą złapał regex.

+0

co jeśli na przykład "$$ hi everyone $$" zostanie zastąpiony? – Zach

+0

@ user2059479 ok, naprawiono – Doorknob

+0

Nie zapomnij "g" po "/". To zadziałało, gdy dodałem tylko ten list. –

3

Stosowanie metody string .replace.

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

-1 bez linku do odnośnika jQuery regex –

8

Użyj tego:

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

Jeśli chciałeś coś w jQuery:

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

Markup:

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

jsFiddle

owinąć go w funkcji dla najlepszego wykorzystania:

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

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

Wydaje się chcesz, aby składni podobnej do promocji cenowych. Dlaczego po prostu nie użyjecie parsera Markdown dla swoich pól, zamiast odkrywać nowe koło?

Showdown JS jest aktywnie rozwijany i uzyskuje się tę samą składnię Markdown, jak w przypadku każdej innej składni markdown.

2

użycie tego łącza i zmiana tag dla rozszerzonej funkcji linkify:

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