Ищем одно регулярное выражение, которое может "переключаться" между двумя состояниями
Нужны креативные идеи. Это для регулярных выражений со вкусом 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"
}