用正则表达式替换单词

时间:2014-01-14 20:40:07

标签: javascript regex

我有这样的文字: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

注意:明星之间可以是任何东西。 (比如SO编辑)

所需的输出:test <b>test</b> <b>test</b> <b>test</b>

问题是什么?

2 个答案:

答案 0 :(得分:4)

这有效:

/\*\*[^\*]*\*\*/g
  1. 错误:量词星在字符类
  2. 错误:您需要全局标记g来替换所有出现的内容
  3. jsfiddle:http://jsfiddle.net/fDM3h/1/

    替换**:

    之间的任何内容的代码
    $text = $text.replace(/\*\*([^\*]*)\*\*/g,'<b>$1</b>');
    

答案 1 :(得分: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>"