首页 > 解决方案 > RegEx 用于匹配不同类型的引号

问题描述

我为我的游戏编写小型脚本“语言”。

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

我想出了如何使用以下方法检查内部的所有内容:

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

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

我在这里查找了如何匹配所有内容,这不在引号内:

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

而且我在连接这两个世界时遇到了麻烦,因此"a`\t`"不会删除这个中间标签

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

做。我知道,我必须检查最后一个未转义(带有$not \)的报价,但我该怎么做呢?

标签: regexregex-negationregex-lookarounds

解决方案


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

在这种情况下,您可以将您的第一个模式包装在一个捕获组中,并在它之后使用管道添加一个交替|以匹配一个选项卡的 1 次以上。

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

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

查看正则表达式演示


推荐阅读