Соответствует одному символу, не заключенному в фигурные скобки
Я делаю файл определения синтаксиса списка свойств (tmLanguage
) для практики. Это в формате YAML Sublime Text, но я буду использовать его в VS Code.
Мне нужно сопоставить все символы (включая неопределенные {
а также }
) которые не заключены в {}
,
Я попытался использовать отрицательные утверждения lookahead и lookbehind, но он просто не соответствует первому или последнему символу в скобках.
(?<!{).(?!})
Добавление жадного квантификатора для потребления всех символов просто соответствует полной строке.
(?<!{).+(?!})
Добавление ленивого квантификатора просто соответствует всему, кроме первого символа после {
, Это также соответствует {}
именно так.
(?<!{).+?(?!})
| Test | Expected Matches |
| ----------------- | ----------------------- |
| `{Ctrl}{Shift}D` | `D` |
| `D{Ctrl}{Shift}` | `D` |
| `{Ctrl}D{Shift}` | `D` |
| `{Ctrl}{Shift}D{` | `D` `{` |
| `{Ctrl}{Shift}D}` | `D` `}` |
| `D}{Ctrl}{Shift}` | `D` `}` |
| `D{{Ctrl}{Shift}` | `D` `{` |
| `{Shift` | `{` `S` `h` `i` `f` `t` |
| `Shift}` | `S` `h` `i` `f` `t` `}` |
| `{}` | `{` `}` |
Пример текстового файла: https://raw.githubusercontent.com/spikespaz/windows-tiledwm/master/hotkeys.conf
Полная подсветка синтаксиса:
# [PackageDev] target_format: plist, ext: tmLanguage
---
name: Hotkeys Config
scopeName: source.hks
fileTypes: ["hks", "conf"]
uuid: c4bcacab-0067-43db-a1d7-7a74fffe2989
patterns:
- name: keyword.operator.assignment
match: \=
- name: constant.language
match: "null"
- name: constant.numeric.integer
match: \{(?:Alt|Ctrl|Shift|Super)\}
- name: constant.numeric.float
match: \{(?:Menu|RMenu|LMenu|Tab|Enter|PgUp|PgDown|Ins|Del|Home|End|PrntScr|Esc|Back|Space|F[0-12]|Up|Down|Left|Right)\}
- name: comment.line
match: \#.*
...
1 ответ
Вы можете использовать следующий RegEx для соответствия:
(?:{(Ctrl|Shift|Alt)})*
Затем просто замените спички пустой строкой, и то, что вы получите, соответствует вашим пожеланиям.
RegEx самоочевидно, но вот краткое описание:
Это создает non capturing Group
состоящий из одной из ваших клавиш-модификаторов в фигурных скобках. Знак плюс+
"справа означает, что это повторяет один или несколько раз.