0

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, '&#91;')
.replace(/\]/g, '&#92;');
}

我在尝试将反向引用传递给 removeBrackets 函数时做错了什么?

4

2 回答 2

2

replace将函数作为回调并在参数中传递捕获组:

var regex = /\[noparse\]([^\]]+)?\[\/noparse\]/ig;

string = string.replace(regex, function(_, match) {
  return '<tag>'+ removeBrackets(match) +'</tag>';
});

第一个参数_是完整的字符串,在大多数情况下是不必要的。

于 2013-06-04T05:41:53.197 回答
1

由于您使用的负字符集有错误,您的正则表达式将不起作用。这修复了它:

input.replace(/\[noparse\]([^\[]+)?\[\/noparse\]/ig, '<noparse>test</noparse>');
                              ^

然后,要执行实际替换,您需要将函数作为第二个参数传递给.replace()而不是简单的字符串。

于 2013-06-04T05:46:25.310 回答