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