1

寻找一些有创意的想法。这适用于 javascript 风格的正则表达式。

当我说“切换”时,我指的是可以执行以下操作的单个正则表达式和单个捕获引用替换字符串:

'my-on-state'.replace(/MYSTERY/, '???')   // => 'my-off-state'
'my-off-state'.replace(/MYSTERY/, '???')   // => 'my-on-state'

给定一个 if 和两个正则表达式,这将是微不足道的;但是,只有 1 个正则表达式,我不确定如果没有某种方法来“捕获”源文本中实际上不存在的组,如何做到这一点——有没有办法做到这一点,也许使用前瞻捕获?

(对于那些想知道的人:这不是实际的 javascript 代码,它是针对 VSCode 键绑定参数的;您可以在变量引用中使用单个正则表达式并替换,所以我必须尽可能地塞进那个单一的正则表达式。 )

4

1 回答 1

1

“您可以将我的问题归结为“是否有一个正则表达式和替换语句将字符串 'apple' 替换为 'banana' 和 'banana' 替换为 'apple'”

“它用于 VSCode 键绑定参数”

您没有详细解释,但听起来您需要有条件的替换 - 您可以在 vscode 片段中执行这些操作:

{
  "key": "shift+alt+y",                        // whatever keybinding you like
  "command":  "editor.action.insertSnippet",
  "args": {
    "snippet": "${TM_SELECTED_TEXT/(apple)|(banana)/${1:+banana}${2:+apple}/g}"

        // if you would rather leave the snippet in a snippet file use this version 
        //  and the snippet that follows below
    // "name": "Apple <=> Banana"  

  },

  // "when": "editorTextFocus && editorHasSelection"
},

或者

"Apple <=> Banana": {
 "prefix": "a-b",
  "body": [
    "${TM_SELECTED_TEXT/(apple)|(banana)/${1:+banana}${2:+apple}/g}"
  ],
  "description": "apples to bananas"
}

条件替换演示

于 2020-07-13T07:58:54.923 回答