gpt4 book ai didi

javascript - 正则表达式选择两个字符串之外的文本并在选择上替换

转载 作者:行者123 更新时间:2023-11-28 15:28:49 24 4
gpt4 key购买 nike

我有一个如下所示的字符串:

"This is a test [Text that (cannot) be changed]. But (this) can be changed."

我想用 html 替换 () 内的字符串,但当它们位于 [ ] 内时则不替换。我想用不同的 html 替换 [ ] 中的所有文本。我的最终结果如下所示。

"This is a test <p>Text that (cannot) be changed</p>". But <b>this</b> can be changed."

我创建了一个表达式,可以选择 [ ] 字符串之外的所有内容。但是我怎样才能只对这个选定的文本进行替换呢?要选择 [ ] 之外的所有内容,我使用:

([^\[\]]+)(?:\s|$|\[)

这将选择 [] 之外的所有文本。我只想对此选定的文本执行 ( ) 的正则表达式替换。

最佳答案

此处的最佳方法在 this SO answer 中进行了解释。 您使用 don't catch this|(do catch this) 的地方技术。我的正则表达式是这样的:

\[[^\]]*]|\(([^)]*)\)

Regular expression visualization

Debuggex Demo

所以我捕捉到 [] 之间的所有内容以及 () 之间的所有内容,但只有后者会生成一个包含您想要保留的文本的捕获组。然后我可以检查这个捕获组来决定要做什么:将其原封不动地返回或放入 <b></b>围绕它。

var subject = 'This (is) a test [Then some text that (cannot) (be) changed]. But (this) can (be) changed.';
var regex = /\[[^\]]*]|\(([^)]*)\)/g;

var replace = subject.replace(regex, function(match, p1)
{
return (p1==undefined)?match:'<b>'+p1+'</b>';
});

console.log(replace);
// This <b>is</b> a test [Then some text that (cannot) (be) changed]. But <b>this</b> can <b>be</b> changed.

(感谢 @johansatge 提供的漂亮模板,我刚刚更改了正则表达式和 return 行)

关于javascript - 正则表达式选择两个字符串之外的文本并在选择上替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28168844/

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