我为我的游戏写了一个小脚本'语言'。
我想允许每个JS字符串文字字符串(`"'
)。
我想出了如何检查那些使用的内容:
(?<e1>""|'|`)(?:\$\k<e1>|(?!\k<e1>).)*\k<e1>)
有用。 但现在,我有一个不同的麻烦。我需要删除所有不在这些类型的引号内的选项卡。
我查了here如何匹配所有内容,这不是在引号内:
\t(?=([^"\\]*(\\.|"([^"\\]*\\.)*[^"\\]*"))*[^"]*$)
而且我在连接这两个世界时遇到了麻烦,因此"a`\t`"
没有删除这个中间标签
\t(?=([^"'`$]*(\$.|['`"]([^"'`$]*\$.)*[^"'`$]*["`']))*[^"`']*$)
确实。我知道,我必须检查最后一个未转义的(用$
而不是\
)引用,但我该怎么做?
您可以匹配您不想要的内容,并使用捕获组保留您想要的内容。
在这种情况下,您可以将第一个模式包装在捕获组中,然后使用管道alternation添加|
,以匹配标签的1倍以上。
在替换中使用第一个捕获组:
((?<e1>""|'|`)(?:\$\k<e1>|(?!\k<e1>).)*\k<e1>)|\t+
^ ^^^^^