正则表达式没有做出所有预期的替换

时间:2015-01-17 21:23:46

标签: javascript regex

我有以下keyup事件处理程序:

$('#id_content').on('keyup', function(e) {
    var input = $.trim($(this).val());
    var matches = input.match(/\*\*(.*?)\*\*/);
    if (matches) {
        var submatch = matches[1];
        input = input.replace(submatch, '<pre>'+submatch+'</pre>').replace(/\*\*/g,'');
    }
    $('#preview_tip').html(input);
});

意思是我有一个textarea,如果我插入a **b** c **d**,它应该输入:

a <pre>b</pre> c <pre>d</pre>

但它只是在输入:

a <pre>b</pre> c d

我的正则表达式中我做错了什么?

1 个答案:

答案 0 :(得分:3)

您只需按照matches[1]操纵一个匹配:所以只更换一个匹配才有意义。

尝试这样的事情:

&#13;
&#13;
var input = 'a **b** c **d**';
var replacedInput = input.replace(/\*{2}(.*?)\*{2}/g, '<pre>$1</pre>');
console.log(replacedInput);
alert(replacedInput); // to make the result obvious
&#13;
&#13;
&#13;

替换字符串中的

$1允许您在每次匹配的替换中使用捕获组(.*?)的值。

此外,您可以使用\*{2}代替\*\*,但这只是一个偏好问题。

要了解此方法在您的事件处理程序中的效果,请查看related JSFiddle