我正在制作一个属性列表语法定义文件(tmLanguage
)进行练习。它采用Sublime Text的YAML格式,但我将在VS Code中使用它。
我需要匹配所有未被{
括起来的字符(包括未终止的}
和{}
)。
我尝试使用否定的先行和后向断言,但它不匹配方括号中的第一个或最后一个字符。
(?<!{).(?!})
添加贪婪的量词以使用所有字符正好匹配整行。
(?<!{).+(?!})
添加惰性量词仅匹配{
之后的第一个字符之外的所有字符。它还与{}
完全匹配。
(?<!{).+?(?!})
| 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: \#.*
...
答案 0 :(得分:0)
您可以使用以下RegEx进行匹配:
(?:{(Ctrl|Shift|Alt)})*
然后只需替换,将匹配项替换为空字符串,您将根据自己的意愿获得
。RegEx是不言自明的,但这是简短说明:
它将创建一个non capturing Group
,该括号由大括号中的一个修饰键组成。右侧的加号'+
'表示重复一次或多次。