我有以下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
我的正则表达式中我做错了什么?
答案 0 :(得分:3)
您只需按照matches[1]
操纵一个匹配:所以只更换一个匹配才有意义。
尝试这样的事情:
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;
替换字符串中的
$1
允许您在每次匹配的替换中使用捕获组(.*?)
的值。
此外,您可以使用\*{2}
代替\*\*
,但这只是一个偏好问题。
要了解此方法在您的事件处理程序中的效果,请查看related JSFiddle。