2014-01-14 3 views
0

У меня есть этот текст: test **test** **test** **test**Заменить слово с регулярным выражением

и я хочу изменить **test** к <b>test</b> с этим кодом:

var $text = 'test **test** **test** **test**'; 
$text = $text.replace(/\*\*[^\**]\*\*/,'<b>test</b>'); 

, но я получаю этот выход: test **test<b>test</b>test** **test**

jsFiddle

примечание: между звездами может быть любое ING. (Например, SO редактор)

желаемый результат: test <b>test</b> <b>test</b> <b>test</b>

чем проблема?

ответ

4

это работает:

/\*\*[^\*]*\*\*/g 
  1. ошибка: квантор звезда была в классе символов
  2. ошибки: вам нужно глобальный флаг g заменить все вхождения

jsfiddle: http://jsfiddle.net/fDM3h/1/

код для замены любого con Палатка между **:

$text = $text.replace(/\*\*([^\*]*)\*\*/g,'<b>$1</b>'); 
+0

Я запутаться с этим регулярным выражением всегда, спасибо :) –

+0

особенно с таким количеством звезд и косыми чертами, его, как удар по голове;) – x4rf41

+0

Yeaa ТОЧНО: D –

2

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

\*\*([^\*]+)\*\* 

И заменить группу захвата $1 следующим образом: http://regex101.com/r/dJ7zG2

Кроме того, у вас нет причин использовать $ в JavaScript переменные, как, что ,

var text = "test **test** **test2** **somethingelse**"; 
text = text.replace(\*\*([^\*]+)\*\*, "<b>$1</b>"); 

Результат:

"test <b>test</b> <b>test2</b> <b>somethingelse</b>" 
Смежные вопросы