我正在构建一个开发人员工具,我的用户可以在一个输入字段中输入正则表达式。
如果他们输入一个试图在任何地方匹配文字 ?
字符的表达式,那么他们可能犯了一个错误,因为我知道 ?
特别保证永远不会出现在要匹配的字符串中(如果他们试图找到一个,那么他们应该采取不同的操作)。在这种情况下我想显示一个警告。
如何快速检查包含正则表达式的字符串是否包含文字 ?
字符?例如。我想警告像 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 色的 min
和 max
之间的“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/