用于匹配不同类型引号的正则表达式
RegEx for matching different types of quotes
我为我的游戏编写小脚本'language'。
我想允许每个 JS 字符串文字字符串 (`"'
)。
我想出了如何检查那些使用以下内容的所有内容:
(?<e1>""|'|`)(?:$\k<e1>|(?!\k<e1>).)*\k<e1>)
有效。
但是现在,我遇到了不同的麻烦。我需要删除所有不在这些类型的引号内的选项卡。
我查了 here 如何匹配所有内容,那不是引号内的:
\t(?=([^"\]*(\.|"([^"\]*\.)*[^"\]*"))*[^"]*$)
我在连接这两个世界时遇到了问题,因此 "a`\t`"
不会像
那样删除中间的标签
\t(?=([^"'`$]*($.|['`"]([^"'`$]*$.)*[^"'`$]*["`']))*[^"`']*$)
确实如此。我知道,我必须检查最后一个未转义的($
而不是 \
)引用,但我该怎么做?
您可以使用捕获组匹配您不想要的内容并保留您想要的内容。
在这种情况下,您可以将您的第一个模式包装在一个捕获组中,并在其后使用竖线 |
添加一个 alternation 以匹配 1+ 次制表符。
在替换中使用第一个捕获组:
((?<e1>""|'|`)(?:$\k<e1>|(?!\k<e1>).)*\k<e1>)|\t+
^ ^^^^^
看到一个regex demo
我为我的游戏编写小脚本'language'。
我想允许每个 JS 字符串文字字符串 (`"'
)。
我想出了如何检查那些使用以下内容的所有内容:
(?<e1>""|'|`)(?:$\k<e1>|(?!\k<e1>).)*\k<e1>)
有效。
但是现在,我遇到了不同的麻烦。我需要删除所有不在这些类型的引号内的选项卡。
我查了 here 如何匹配所有内容,那不是引号内的:
\t(?=([^"\]*(\.|"([^"\]*\.)*[^"\]*"))*[^"]*$)
我在连接这两个世界时遇到了问题,因此 "a`\t`"
不会像
\t(?=([^"'`$]*($.|['`"]([^"'`$]*$.)*[^"'`$]*["`']))*[^"`']*$)
确实如此。我知道,我必须检查最后一个未转义的($
而不是 \
)引用,但我该怎么做?
您可以使用捕获组匹配您不想要的内容并保留您想要的内容。
在这种情况下,您可以将您的第一个模式包装在一个捕获组中,并在其后使用竖线 |
添加一个 alternation 以匹配 1+ 次制表符。
在替换中使用第一个捕获组:
((?<e1>""|'|`)(?:$\k<e1>|(?!\k<e1>).)*\k<e1>)|\t+
^ ^^^^^
看到一个regex demo