如何在 cson 中使用正则表达式

How to use regex with cson

我想在 .cson 文件中使用正则表达式从 ooRexx 捕获逻辑运算符,因为我想支持使用 Atom 编辑器突出显示 ooRexx 的语法。这些是我试图涵盖的运算符:

>= <= \> \< \= >< <> == \== // && || ** ¬> ¬< ¬= ¬== >> << >>= \<< ¬<< \>> ¬>> <<=

这是 cson 文件中的正则表达式部分:

'match': '\+ | - | [\\] | \/ | % | \* | \| | & |=|¬|>|<|
>= | <= | ([\\]>) | ([\\]<) | ([\\]=) | >< | <> | == | ([\\]==) | 
\/\/ | && | \|\| | \*\* | ¬> | ¬< | ¬= | ¬== | >> | << | >>= | ([\\]<<) | ¬<< |
([\\]>>) | ¬>> | <<='

我在使用斜杠(向前和向后)以及双斜杠时遇到困难 **我对正则表达式的了解非常基础,说得好听一点。有人可以帮助我吗?

您在管道条周围有 spaces:这些 spaces 被计算在正则表达式中。所以当你写像 | \*\* | 这样的东西时,双星号会被捕获,但是 只有 如果它们的每一侧都被 space 包围,而不是如果它们' re 附加到一个词或一行的 beginning/end 处。斜线也有同样的问题——我已经测试过了,它似乎确实帮我捕捉到了它们,但前提是你的斜线(或星号)在两个 space 之间。

其他一些注意事项:

  • 反斜杠两边不需要方括号;它们对于提供 个可能的匹配字符很有用。例如,[<>]= 将捕获 >=<=。写 [\] 等同于直接写 \ 因为 \ 算作一个字符,因为第一个转义反斜杠。同样,这里没有使用您的括号;参见 grouping
  • 也可以考虑像 +* 一样使用 repetition operators。所以 \>+ 会捕获 \>\>>
  • 最后,问号将前一个字符(或一组字符,在方括号中)标记为可选,从而帮助您避免重复。 ==? 将同时匹配 ===.

结合这三个技巧,您可以将很多语句组合在一起……我将把这个练习留给您!

开发长正则表达式时的另一个提示 — 使用像 Regex101 or similar with a test file to see your changes in real time, and debuggers like Regexper 这样的测试器将帮助您了解正则表达式的解析方式。