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

问题描述 投票:0回答:1

我为我的游戏写了一个小脚本'语言'。

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

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

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

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

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

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

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

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

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

regex regex-negation regex-lookarounds
1个回答
1
投票

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

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

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

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

看到regex demo

© www.soinside.com 2019 - 2024. All rights reserved.