gpt4 book ai didi

Javascript 正则表达式 - 同时向后查找和向前查找

转载 作者:行者123 更新时间:2023-11-28 13:28:17 25 4
gpt4 key购买 nike

我正在尝试在 JavaScript 中创建一个匹配字符 b 的正则表达式(如果它前面或后面没有字符 a)。

显然,JavaScript 正则表达式没有容易实现的负向后查找,这使得任务变得困难。我想出了以下一个,但它不起作用。

"ddabdd".replace(new RegExp('(?:(?![a]b(?![a])))*b(?![a])', 'i'),"c");

是我能想到的最好的。在这里,b 不应该匹配,因为它前面有 a,但它匹配。

一些关于我想要实现的目标的例子

"ddbdd" matches the b
"b" matches the b
"ddb" matches the b
"bdd" matches the b
"ddabdd" or "ddbadd" does not match the b

最佳答案

似乎您可以使用包含字符串 anchor 开头或“b”之前的否定字符类的捕获组,同时使用负向前瞻来断言“a”也不会跟随。然后,您只需在替换调用中引用 $1 以及替换字符串的其余部分即可。

var s = 'ddbdd b ddb bdd ddabdd ddabdd ddbadd';
var r = s.replace(/(^|[^a])b(?!a)/gi, '$1c');
console.log(r); //=> "ddcdd c ddc cdd ddabdd ddabdd ddbadd"

编辑:由于@nhahtdh指出了有关连续字符的评论,您可以考虑回调。

var s = 'ddbdd b ddb bdd ddabdd ddabdd ddbadd sdfbbfds';
var r = s.replace(/(a)?b(?!a)/gi, function($0, $1) {
return $1 ? $0 : 'c';
});
console.log(r); //=> "ddcdd c ddc cdd ddabdd ddabdd ddbadd sdfccfds"

关于Javascript 正则表达式 - 同时向后查找和向前查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27350139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com