我在一些javascript代码中使用RegExp,我用它来替换看起来像这样的字符串:
[1]
看起来像这样:
[2]
这一切都可以,但是我只想这样做,如果前面的字符不是:
所以
某事[1] 应成为 某事[2]
但是
某事[1] [somethingelse] [1] 应该成为 某事[2] [somethingelse] [1]
我目前的代码如下:
var first = 1;
var count = 2;
var pattern = escapeRegExp("[" + first + "]");
var regex = new RegExp(pattern, 'g');
$(this).html().replace(regex, '['+count+']'));
任何建议表示赞赏。
由于
答案 0 :(得分:2)
您可以在[1]
部分之前使用否定字符类,它将匹配]
以外的任何字符。并将其捕获到一个组中:
var pattern = escapeRegExp("([^\\]])[" + first + "]");
var regex = new RegExp(pattern, 'g');
$(this).html().replace(regex, '$1['+count+']'));
答案 1 :(得分:2)
答案 2 :(得分:1)
作为缺少的lookbehind的替代品,捕获组中的前一个char并在替换时将其放回:
str = "foo[1] bar[2] baz[3][somethingelse][1]"
re = /([^\]])\[(\d+)\]/g
str.replace(re, function($0, $1, $2) {
return $1 + '[' + (1 + Number($2)) + ']'
})
> "foo[2] bar[3] baz[4][somethingelse][1]"