Строка JavaScript/jQuery заменяется регулярным выражением

Скажем, я получаю значение a <textarea> с помощью jQuery. Как я могу заменить часть значения с помощью JavaScript/jQuery. Например:

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

замените $$zach$$ на <i>Zach</i>

И сохраните оставшуюся часть строки без изменений?

Ответы

Ответ 1

Используйте замену регулярного выражения:

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

Объяснение регулярного выражения:

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

Затем группа захвата используется в строке '<i>$1</i>'. $1 относится к группе, которую зарегистрировало регулярное выражение.

Ответ 2

Используйте это:

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

Если вы хотите что-то в jQuery:

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

Разметка:

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

jsFiddle

Оберните его в функцию для наилучшего использования:

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

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

Похоже, вы хотите сделать синтаксис, похожий на Markdown. Почему бы просто не использовать парсер Markdown для ваших полей, а не изобретать колесо?

Развернутый JS активно развивается, и вы получаете тот же синтаксис Markdown, что и любой другой синтаксис уценки.

Ответ 3

Использование метода string .replace сделает.

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

Ответ 4

Используйте это, измените ссылку и тег для расширенной функции связывания:

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