用于匹配不同类型引号的正则表达式

RegEx for matching different types of quotes

我为我的游戏编写小脚本'language'。

我想允许每个 JS 字符串文字字符串 (`"')。

我想出了如何检查那些使用以下内容的所有内容:

(?<e1>""|'|`)(?:$\k<e1>|(?!\k<e1>).)*\k<e1>)

有效。
但是现在,我遇到了不同的麻烦。我需要删除所有不在这些类型的引号内的选项卡。

我查了 here 如何匹配所有内容,那不是引号内的:

\t(?=([^"\]*(\.|"([^"\]*\.)*[^"\]*"))*[^"]*$)

我在连接这两个世界时遇到了问题,因此 "a`\t`" 不会像

那样删除中间的标签
\t(?=([^"'`$]*($.|['`"]([^"'`$]*$.)*[^"'`$]*["`']))*[^"`']*$)

确实如此。我知道,我必须检查最后一个未转义的($ 而不是 \)引用,但我该怎么做?

您可以使用捕获组匹配您不想要的内容并保留您想要的内容。

在这种情况下,您可以将您的第一个模式包装在一个捕获组中,并在其后使用竖线 | 添加一个 alternation 以匹配 1+ 次制表符。

在替换中使用第一个捕获组:

((?<e1>""|'|`)(?:$\k<e1>|(?!\k<e1>).)*\k<e1>)|\t+
^                                            ^^^^^    

看到一个regex demo