JS / Ruby: частичная замена с использованием регулярных выражений - PullRequest
0 голосов
/ 03 марта 2010

Я пытаюсь заменить различные части HTML-кода с помощью одного регулярного выражения.

Например, у меня есть этот текст:

option_!!NID!! [somme_text][5] some_text_option 5_option_some_text

, используя эторегулярное выражение:

content.replace(/(!!NID!!)|\[(\d)\]|(\d)_option/g, 1))

Я ожидаю получить:

option_1 [somme_text][1] some_text_option 1_option_some_text

но у меня есть:

option_1 [somme_text]1 some_text_option 1_some_text

Может кто-нибудь сказать мне, как делать то, что я хочу, используя одно регулярное выражение?Потому что я не понимаю, почему замена не только заменяет цель между круглыми скобками.

Спасибо:)

PS: я использую Ror, поэтому решение для ruby ​​и JS такжевозможно.

Ответы [ 2 ]

0 голосов
/ 03 марта 2010

Хорошо, я нашел решение. Это двухэтапное решение.

Итак, в начале у меня есть:

option_!!NID!! [somme_text][5] some_text_option 5_option_some_text

Сначала я выполняю замену в строке, используя метод ruby ​​String.gsub:

str.gsub!(/\[(\d)\]|(\d_option)/) { |result| result.gsub(/\d/, '!!NID!!') }

После этого шага у меня есть:

option_!!NID!! [somme_text][!!NID!!] some_text_option !!NID!!_option_some_text

Теперь я могу выполнить простую замену на стороне клиента, используя JS.

content.replace(/(!!NID!!)/g, 1)

и вуаля:)

Теперь я получил ожидаемый результат, избегая любых уродливых строк JS.

Я все еще ищу лучшее решение, если вы знаете одно:)

0 голосов
/ 03 марта 2010

Весь матч заменен. Это означает, что вам нужно обрабатывать дела по-разному:

"option_!!NID!! [somme_text][5] some_text_option 5_option_some_text".
    replace(/!!NID!!/g, "1").
    replace(/\d_option/g, "1_option").
    replace(/\[\d\]/g, "[1]")

Первый и второй случаи могут затем быть объединены с использованием заблаговременного утверждения для второго:

"option_!!NID!! [somme_text][5] some_text_option 5_option_some_text".
    replace(/!!NID!!|\d(?=_option)/g, "1").
    replace(/\[\d\]/g, "[1]")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...