gpt4 book ai didi

javascript - 正则表达式:添加带有前瞻性的负面案例

转载 作者:行者123 更新时间:2023-11-29 21:33:54 25 4
gpt4 key购买 nike

我有来自 here 的以下正则表达式:

/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/

此正则表达式旨在匹配 2 个下划线和它们之间的文本。例如:

var regex = /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/;
var string = '_omgbbq_';
regex.exec(string);
>>>["_omgbbq_", "omgbbq", undefined]

但是,我想添加一条额外的规则——如果下划线前有一个反斜杠,那么它应该忽略它。例如:

var string = '_omg\\_bbq_'
regex.exec(string)
>>>["_omgbbq_", "omgbbq", undefined]

向此正则表达式添加否定案例以使其忽略后跟反斜杠的下划线的最佳方法是什么?我倾向于使用 lookahead ,但是这个正则表达式太复杂了,我不确定在不弄乱任何东西的情况下将它插入哪里。我可以在此正则表达式中的何处添加前瞻以检测和忽略否定案例?

最佳答案

你可以使用

var regex = /^_(?=\S)([\s\S]*?[^\s\\])_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/;
^^^^^^^

我将 \S 扩展为否定字符类 [^\s] 并在其中添加了一个 \ 这样我们就不会匹配最接近的 _(如果它前面有反斜杠)。

如果您还需要匹配像 *omg\*bbq* 这样的字符串(请参阅您拥有的正则表达式中的第二个选项),您可以使用相同的技术:

var regex = /^_(?=\S)([\s\S]*?[^\s\\])_(?!_)|^\*(?=\S)([\s\S]*?[^\s\\])\*(?!\*)/;

var regex = /^_(?=\S)([\s\S]*?[^\s\\])_(?!_)|^\*(?=\S)([\s\S]*?[^\s\\])\*(?!\*)/g;
var string = "_omg\\_bbq_ ";
console.log(string.match(regex));
string = "*omg\\*bbq*";
console.log(string.match(regex));

关于javascript - 正则表达式:添加带有前瞻性的负面案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35326079/

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