javascript - 正则表达式不会在新行上回溯
问题描述
我试图检测不正确(过度)的代码
foo {
bar {
baz {
使用正则表达式,我发现了一个有趣的行为。
我正在使用的正则表达式/^( *).+\n\1 {3,}/
在 VS Code(标准查找和替换对话框)中会触发所有内容的误报。同时在 JavaScript (Chrome 74) 中没有这样的行为。
更严格的正则表达式/^( *)\S.+\n\1 {3,}/
可以正常工作,但我想知道为什么存在差异?是在 JavaScript 中换行后不回溯(这是我的疯狂猜测)还是 VS Code 是否专门处理空白字符,例如默认情况下不贪婪地匹配它们?
PS:IE 的工作方式与 Chrome 相同。
解决方案
好的,似乎 VSCode 运行带有 flags 的正则表达式im
。没有m
标志,^
只匹配字符串的开头——而不是任何新行的开头。
而且 BTW JS 不支持 \A 和 \Z 锚点;
推荐阅读
- c++ - 您可以在类和构造函数中进行初始化吗?对吗?
- python - Python Pandas:将值应用于 groupby 结果
- android - 如何使用 ProGuard 去除 Timber.tag.(...).d(...) 格式的日志?
- javascript - 单击添加到购物车以触发弹出窗口
- c - 如何使输入不超过指定长度?
- sql - 插入到仅包含标识列的表中
- python - 在 python 中为 Panda 数据框的每一行创建一个雷达图
- php - 为什么 error.com 将我重定向到我的 wamp 服务器 localhost?
- python - 如何在 iOS 上长按?
- javascript - OnClick Javascript 函数在 React 中不起作用