Хорошо, я нашел решение. Это двухэтапное решение.
Итак, в начале у меня есть:
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.
Я все еще ищу лучшее решение, если вы знаете одно:)