RegEx用于匹配不同类型的报价

时间:2019-04-26 13:53:59

标签: regex regex-negation regex-lookarounds

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

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

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

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

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

我抬起头来here如何匹配所有内容,这不是引号内的内容:

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

我在连接这两个世界时遇到了麻烦,因此"a`\t`"并没有删除中间的标签

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

查看regex demo