Ищем одно регулярное выражение, которое может "переключаться" между двумя состояниями

Нужны креативные идеи. Это для регулярных выражений со вкусом JavaScript.

Когда я говорю "переключить", я имею в виду одно регулярное выражение и одну строку захвата-ссылки-замены, которые могут выполнять следующие действия:

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

Если бы и два регулярных выражения, это было бы тривиальным; однако, используя всего 1 регулярное выражение, я не уверен, как это можно сделать без какого-либо способа "захватить" группу, которой на самом деле не существует в исходном тексте - есть ли способ сделать это, возможно, с помощью опережающего взгляда захватить?

(Для тех, кто интересуется: это не фактический код javascript, а аргумент привязки клавиш VSCode; вам разрешено одно регулярное выражение и замена в ссылке на переменную, поэтому я должен втиснуть все, что могу, в это единственное регулярное выражение.)

0 ответов

"Вы могли бы свести мой вопрос к" есть ли одно регулярное выражение и оператор replace, который заменяет строку "яблоко" на "банан" и "банан" на "яблоко"

"это для аргумента привязки клавиш 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"
}

Другие вопросы по тегам