【发布时间】:2018-04-05 15:41:02
【问题描述】:
寻找一些创意。这适用于 javascript 风格的正则表达式。
当我说“切换”时,我指的是单个正则表达式和单个捕获引用替换字符串,它们可以执行以下操作:
'my-on-state'.replace(/MYSTERY/, '???') // => 'my-off-state'
'my-off-state'.replace(/MYSTERY/, '???') // => 'my-on-state'
给定一个 if 和两个正则表达式,这将是微不足道的;但是,只有 1 个正则表达式,我不确定如果没有某种方法来“捕获”源文本中实际上不存在的组,如何做到这一点——有没有办法做到这一点,也许使用前瞻捕获?
(对于那些想知道的人:这不是实际的 javascript 代码,它用于 VSCode 键绑定参数;您可以在变量引用中使用单个正则表达式和替换,所以我必须尽我所能塞进去单个正则表达式。)
【问题讨论】:
-
不确定我是否理解您要完成的工作。您是在切换这两个值还是将
on更改为off,反之亦然?如果是这样,规则是什么?还有其他需要替换的词吗?当你说只有一个正则表达式替换时,你的意思是你想把你的两个正则表达式组合成一个吗?如果是这种情况,除非您使用回调函数,否则 javascript 的正则表达式是不可能的。 -
嗯,在这个 sn-p 前后有一堆我关心的文本,但它并不有趣/不相关(即它有简单的解决方案)。也许您可以将我的问题归结为“是否有一个正则表达式和替换语句将字符串 'apple' 替换为 'banana' 和 'banana' 替换为 'apple'”。
-
这有帮助吗? ConditionalReplace :rexegg.com/regex-trick-conditional-replacement.html 。您需要将其替换为 ('my-on-state' + 'onoff').replace(...) 然后
-
大概是这样的:jsfiddle.net/z9854b5y
-
感谢大家的建议,我认为我试图做的事情不能用一个正则表达式来完成(它绝对可以用两个来完成,或者用 match + if 语句等)。幸运的是,我找到了另一种解决问题的方法。
标签: regex visual-studio-code vscode-snippets