javascript replace () несколько экземпляров bbcode с несколькими html - PullRequest
2 голосов
/ 14 февраля 2012

Мне нужно получить функцию javascript replace () для замены каждого экземпляра a [b] или [/ b] на <b> или </b>. Я попробовал это с глобальным тегом, но он не работает и выглядит странно:

document.write(str.replace(/[b]/g,'<b>').replace(/[/b]/g,'</b>'));

приводит к выводу:

[<>]<>la<>la[<>][<>]<>la<>la[<>] 

Я также попытался изменить первую часть на:

  document.write(str.replace(/[[b]]/g,'<b>').replace(/[[/b]]/g,'</b>'));

какой вид работает, но везде есть странные ... вот так:

[blabla[/[blabla[/

Я знаю, что, наверное, что-то очевидное мне здесь не хватает ... Но я не могу найти это ... любую помощь, и я буду любить тебя вечно XD

Ответы [ 2 ]

4 голосов
/ 14 февраля 2012

[, ] и / являются специальными символами RegExp .

  • [a] означает: соответствует любому a символу.[abcd] означает: соответствует одному символу, который является одним из a, b, c, d.[a-z] означает: сопоставить любую букву.
  • / используется для обозначения начала и конца регулярного выражения.

Чтобы использовать буквенные символы, их необходимо экранировать.

str.replace(/\[b\]/g,'<b>').replace(/\[\/b\]/g,'</b>')

Обратите внимание, что оба регулярных выражения можно объединить, используя обратную ссылку:

str.replace(/\[(\/?)b\]/g,'<$1b>')
// Replaces [b] with <b>, [/b] with </b>
0 голосов
/ 14 февраля 2012

Возможно, вам будет гораздо лучше заменить их сразу:

 str = "[b]foo[/b] and [b]bar[/b]"
 str.replace(/\[b\](.+?)\[\/b\]/g,'<b>$1</b>') // <b>foo</b> and <b>bar</b>

Вы также можете пойти еще дальше и обработать несколько кодов форматирования (в данном примере b, i, u и s) наодно регулярное выражение:

str = "[b]foo[/b] and [i]bar[/i]"
str.replace(/\[([bius])\](.+?)\[\/\1\]/g,'<$1>$2</$1>')

Подобные выражения (с (.+?)) лучше, чем у вас, потому что они обрабатывают только допустимую разметку и игнорируют незакрытые [теги].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...