0

我在一些 javascript 代码中使用 RegExp 来替换如下所示的字符串:

[1]

一个看起来像这样的:

[2]

这一切正常,但是我只想这样做,如果前面的字符不是:

]

所以

某事[1] 应该成为 某事[2]

something[1][somethingelse][1] 应该变成 something[2][somethingelse][1]

我当前的代码如下所示:

var first = 1;
var count = 2;
var pattern = escapeRegExp("[" + first + "]");
var regex = new RegExp(pattern, 'g');

$(this).html().replace(regex, '['+count+']'));

任何建议表示赞赏。

谢谢

4

3 回答 3

2

您可以在 part 之前有一个否定字符类[1],它将匹配除]. 并将其捕获在一个组中:

var pattern = escapeRegExp("([^\\]])[" + first + "]");
var regex = new RegExp(pattern, 'g');

$(this).html().replace(regex, '$1['+count+']'));
于 2013-10-11T10:34:56.917 回答
2

你需要的是Lookarounds。试试这个正则表达式:

/(?<!\[)\[1\]/[2]/

编辑:由于我刚刚被告知 JS 不支持这一点,您可以尝试否定字符类。

/[^\[]\[1\]/[2]/
于 2013-10-11T10:35:13.770 回答
1

作为缺少的lookbehind的替换,捕获组中的前一个字符并在替换时将其放回:

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]"
于 2013-10-11T11:21:56.663 回答