Javascript 正则表达式有例外

Javascript regex with exception

本文关键字:正则表达式 Javascript      更新时间:2023-09-26

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

[1]

一个看起来像这样:

[2]

这一切都可以正常工作,但是如果前面的字符不是:

]

所以

某物[

1]应该成为某物[2]

某物[1][别的东西][1]

应该变成某物[2][别的东西][1]

我当前的代码如下所示:

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

任何建议表示赞赏。

谢谢

您可以在[1]部分之前有一个否定字符类,它将匹配除 ] 以外的任何字符。并成组捕获它:

var pattern = escapeRegExp("([^'']])[" + first + "]");
var regex = new RegExp(pattern, 'g');
$(this).html().replace(regex, '$1['+count+']'));
你需要的是

环顾四周。试试这个正则表达式:

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

编辑:由于我刚刚被告知JS不支持此功能,因此您可以尝试否定字符类。

/[^'[]'[1']/[2]/

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

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]"