javascript - 点 ?正则表达式字符串中的字 rune 字

标签 javascript regex string parsing

我正在构建一个开发人员工具,我的用户可以在一个输入字段中输入正则表达式。

如果他们输入一个试图在任何地方匹配文字 ? 字符的表达式,那么他们可能犯了一个错误,因为我知道 ? 特别保证永远不会出现在要匹配的字符串中(如果他们试图找到一个,那么他们应该采取不同的操作)。在这种情况下我想显示一个警告。

如何快速检查包含正则表达式的字符串是否包含文字 ? 字符?例如。我想警告像 hello\? 这样的正则表达式字符串,但不是 https?

检测 \? 可能是一个好的开始,但我想还有其他情况。

我正在用 JavaScript 构建这个。如果可能的话,基于简单字符串处理的解决方案比完全解析正则表达式更可取。

最佳答案

考虑使用现有的正则表达式解析器,它输出 AST .

例如 JavaScript:
https://www.npmjs.com/package/regjsparser
https://github.com/jviereck/regjsparser

这里的演示页面允许您查看生成的 AST:
http://www.julianviereck.de/regjsparser/

然后你可以查看 AST 中的“codePoint”(63):

{
      "type": "value",
      "kind": "identifier",
      "codePoint": 63,
      "range": [
        15,
        17
      ],
      "raw": "\\?"
    }

另请注意,“characterClassRange”类型也可能包含您的“?”其范围内的字符,以下包括包括“?”在内的字符范围(63): http://www.julianviereck.de/regjsparser/#%2F%5B%5Cu003e-%5Cu0040%5D%2Fiu

您可以检查 Angular 色的 minmax 之间的“codePoint”范围。

{
      "type": "characterClassRange",
      "min": {
        "type": "value",
        "kind": "unicodeEscape",
        "codePoint": 62,
        "range": [
          1,
          7
        ],
        "raw": "\\u003e"
      },
      "max": {
        "type": "value",
        "kind": "unicodeEscape",
        "codePoint": 64,
        "range": [
          8,
          14
        ],
        "raw": "\\u0040"
      },
      "range": [
        1,
        14
      ],
      "raw": "\\u003e-\\u0040"
    }

显然,请检查其他测试用例以了解可能包括您的 Angular 色的其他“类型”,但通常使用 AST 执行这些检查将改善您“捕获”它们的方式(“Gotta Catch 'Em All”)。

另请注意,有一个 JS 库可以从 AST 生成正则表达式:
https://www.npmjs.com/package/regjsgen
https://github.com/bnjmnt4n/regjsgen

关于javascript - 点 ?正则表达式字符串中的字 rune 字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57460299/

相关文章:

javascript - 试图在 Javascript 中滚动 insertAfter() 的奇怪行为

javascript - 包含函数的返回值应为 null 或模板

javascript - 正则表达式匹配 &entity;或 &#0-9;并捕获&

Java .contains() 的行为不符合我的预期

javascript - 在图像后找到结束 anchor 标记

javascript - 异步汤调用

java - 正则表达式选择下划线之间的所有字符

regex - Sublime & Regex : How to find all lines that are 3 letters or less, 不包括某些行?

string - 排序重复字符串最快的方法是什么

java - 如何将不明确的字符串解析为日期?