gpt4 book ai didi

javascript - 用正则表达式替换匹配项

转载 作者:行者123 更新时间:2023-12-03 05:55:14 25 4
gpt4 key购买 nike

我正在尝试替换美元符号之间的文本匹配。

因此,Some text 和 $some text that matches$. 中的文本 $match$ 应该被替换。

我已经尝试过

text.replace(/\$.*?\$/g, function (match) {
return '_' + match + '_';
}

这有效。问题是我想评估该函数内的匹配,但有时评估不起作用,在这些情况下我只想返回原始匹配。所以它就像这样

text.replace(/\$.*?\$/g, function (match) {
try {
return evaluate(match);
} catch (e) {
return match;
}
}

但是使用我当前的正则表达式,匹配包含原始文本中的美元符号。我希望它省略美元符号,但如果评估失败,那么我希望恢复原来的美元符号。

我能做的是

text.replace(/\$.*?\$/g, function (match) {
try {
return evaluate(match.replace(/\$/g, ''));
} catch (e) {
return match;
}
}

但是难道不能以更优雅的方式实现吗?

最佳答案

类似这样的事情可能会做:

const evaluate = function(str) {
if (str && str.startsWith("t")) {return str.toUpperCase();}
throw "Gotta hava a 'T'";
};

"ab$test$cd $something$ that is $tricky$.".replace(/\$([^$]*)\$/g;, function(str, match) {
try {
return evaluate(match);
} catch(e) {
return str;
}
}); //=> "abTESTcd $something$ that is TRICKY."

但我同意这样的评论,即您可能最好从 evaluate 返回不同的信号(undefinednull?),而不是抛出对于这个案例。然后函数体可以简单地类似于:

        return evaluate(match) || str;

重点是正则表达式中的捕获组:/\$([^$]*)\$/g;,它成为替换函数的参数。

关于javascript - 用正则表达式替换匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39960502/

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