var string = input.replace(/\[noparse\]([^\]]+)?\[\/noparse\]/ig, '<noparse>'+removeBrackets('$1')+'</noparse>');
此表达式应采用字符串并对 [noparse] 标记中包含的部分进行编码,以便它们不会在textarea中呈现。
我测试了这个:
var string = input.replace(/\[noparse\]([^\]]+)?\[\/noparse\]/ig, '<noparse>test</noparse>');
和:
var string = input.replace(/\[noparse\]([^\]]+)?\[\/noparse\]/ig, '<noparse>'+String('$1')+'</noparse>');
他们工作(没有预期的效果)。
function removeBrackets(input){
return input
.replace(/\[/g, '[')
.replace(/\]/g, '\');
}
在尝试将后引用传递给removeBrackets函数时,我做错了什么?
答案 0 :(得分:2)
replace
将函数作为回调并传递参数中的捕获组:
var regex = /\[noparse\]([^\]]+)?\[\/noparse\]/ig;
string = string.replace(regex, function(_, match) {
return '<tag>'+ removeBrackets(match) +'</tag>';
});
第一个参数_
是完整字符串,在大多数情况下是不必要的。
答案 1 :(得分:1)
由于您正在使用的否定字符集中存在错误,因此您的正则表达式将无效。这解决了它:
input.replace(/\[noparse\]([^\[]+)?\[\/noparse\]/ig, '<noparse>test</noparse>');
^
然后,要执行实际替换,您需要将函数作为第二个参数传递给.replace()
而不是简单的字符串。