为什么 `/\:/u` 会抛出“无效转义”错误? [复制]

2024-03-15

我有这样的代码:

url.match(/^https?\:\/\/([^\/:?#]+)(?:[\/:?#]|$)/ui)

ESLint 说Parsing error: Invalid regular expression: /^https?\:\/\/([^\/:?#]+)(?:[\/:?#]|$)/: Invalid escape.

我不明白为什么这个正则表达式是错误的。我应该如何修复它?


不必要的转义序列对于以下内容无效u flag

\:是不必要的转义序列。那些是invalid当使用u旗帜。只需使用:反而。

规范、调试器、文档

这些是字符类之外的特殊字符的有效且必要的转义序列:\$, \(, \), \*, \+, \., \?, \[, \\, \], \^, \{, \|, \} (all “语法字符” https://tc39.es/ecma262/#prod-SyntaxCharacter), and \/(特殊情况是身份逃避 https://tc39.es/ecma262/#prod-IdentityEscape).

其他转义序列如\ , \!, \", \#, \%, \&, \', \,, \-, \:, \;, \<, \=, \>, \@, \_, \`, \~是不必要的,因此无效u flag.

Look into the specification https://tc39.es/ecma262/#prod-AtomEscape for all the escaping rules in detail.1


类似的工具RegEx101 https://regex101.com/报告这个 — 不过有点神秘:

/\:/u:

\:— 此标记没有特殊含义,因此被认为是错误的


至于文档,我有just now在中添加了注释MDN 上的正则表达式备忘单 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Cheatsheet:

请注意,有些字符例如:, -, @等在转义或未转义时都没有特殊含义。 转义序列如\:, \-, \@将等价于正则表达式中它们的字面量、未转义字符等价物。 然而,在正则表达式中统一码标志 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Advanced_searching_with_flags_2,这些都会导致无效身份转义 error.

基本原理

注释继续:

这样做是为了确保与使用新转义序列的现有代码向后兼容,例如\p or \k.

当该功能被提出并引入时,这就是提案的常见问题解答 https://github.com/tc39/proposal-regexp-unicode-property-escapes#what-about-backwards-compatibility不得不说:

向后兼容性怎么样?

在正则表达式中不带u旗帜、图案\p是一个(不必要的)转义序列p。 表格的图案\p{Letter}可能已经存在于现有的正则表达式中,而无需u标志,因此我们不能在不破坏向后兼容性的情况下为这些模式分配新的含义。

因此,ECMAScript 2015 制作了不必要的转义序列,例如\p and \P 抛出异常 https://tc39.es/archives/bugzilla/3157/当。。。的时候u标志已设置。 这使我们能够改变\p{…} and \P{…}在正则表达式中u标志而不破坏向后兼容性。

此页面也链接自此ES 讨论话题 https://esdiscuss.org/topic/why-is-regexp-u-a-syntax-error提出这个问题的地方:

为什么是正则表达式/\-/u语法错误?

JSLint 之前警告过未转义的文字-在正则表达式中。 然而,逃脱-与 unicode 标志一起u在 Chrome、Firefox 和 Edge 中导致语法错误(JSLint 已删除该警告)。 只是好奇上述边缘情况是语法错误的原因。

(我对语法进行了细微的调整。)

回复链接到上述 GitHub 存储库以及该提案,但也以不同的方式解释了其基本原理:

想想u标记为正则表达式的严格模式。

因此,每当您使用u旗帜,记住这一点。 一旦您使用正则表达式,其行为就会开始有些不同u。 某些新事物变得有效,但某些其他事物也变得无效。 例如,另请参阅Why is /[\w-+]/一个有效的正则表达式但是/[\w-+]/u无效的? https://stackoverflow.com/q/54205197/4642212.


1: You’ll find certain production rules with [U] which is a parameter that represents Unicode patterns. See the grammar notation reference https://tc39.es/ecma262/#sec-grammar-notation for decoding these.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 `/\:/u` 会抛出“无效转义”错误? [复制] 的相关文章

  • 邮件附件媒体类型错误 Gmail API

    我正在尝试通过 Javascript 客户端中的 Gmail API 发送带有附加 jpeg 文件的消息 到目前为止我写的代码如下 ajax type POST url https www googleapis com upload gma
  • 如何通过 .htaccess 删除 URL 中任何位置的空参数或参数?

    我的意思是空参数可以在 URL 中的任何位置 每次不同的位置 每次使用不同的名称 每次在不同的 php 页面上 例如 http www example com AnyPHPpageHere php parameter1 7 paramete
  • 从 DOM 中删除后,动态添加的 JavaScript 脚本会继续执行

    因此 我正在创建一个 SPA 并使用 AJAX 将 HTML 页面加载到我网站的索引页面中 问题是 当包含我的一个页面时 它似乎会徘 徊并执行其中的 JavaScript 代码 即使它随后从 DOM 中删除 索引 html 正文 div d
  • 未捕获类型错误:无法解析模块说明符“fs”。相对引用必须以“/”、“./”或“../”开头

    当我尝试在我自己的模块中导入 fs 模块时 例如import as fs from fs 浏览器控制台出现以下错误 Uncaught TypeError Failed to resolve module specifier fs Relat
  • 区分单击与 mousedown/mouseup

    我已经阅读了有关这种情况的 stackoverflow 上的几个答案 但没有一个解决方案有效 我尝试根据用户是否单击某个元素或使用 jQuery 将鼠标按住该元素来执行不同的操作 有可能做到这一点吗 onMouseDown 将在按下左侧或右
  • WebDriver:更改事件未触发

    我有一个使用 KnockoutJS 的应用程序 我正在尝试编写一些测试表单的测试 如果您不了解 KnockoutJS 简单来说 它提供了从我的视图到我的数据模型的绑定 这意味着当我在输入字段中键入值时 我的基础对象会自动使用该输入字段值进行
  • 使用 easyXDM 调整 IFrame 大小

    我将 iFrame 代码提供给客户 以便他们可以显示我网站上的动态内容 我希望其页面上的 iFrame 能够调整大小以适合我的内容 我按照 easyXDM 网站的说明进行操作 但也许我遗漏了一些东西 我没有收到任何错误 但 iFrame 保
  • 如何向尚未添加到页面的元素注册 Javascript 事件处理程序

    我正在尝试构建一个greasemonkey 脚本 它将根据用户与其他动态创建的数据表的交互动态创建数据表 我的问题是 每次创建表时 我都必须进行两次传递 一次用于创建表 另一次用于获取表中我想要添加事件处理程序的所有对象 通过 id 并添加
  • 如何在参数上使用 .reduce() 而不是特定的数组或对象?

    我想定义一个函数 flatten 将多个元素展平为一个数组 我知道以下是不可能的 但本质上我想这样做 var flatten function var flattened arguments reduce function acc elem
  • t /= d 是什么意思? Python 和错误

    t current time b begInnIng value c change In value d duration def easeOutQuad swing function x t b c d alert jQuery easi
  • 如何检查jquery数据表中的每个复选框?

    我有一个第一列带有复选框的表格 我使用 jQuery DataTable 插件显示我的表格 我制作了 2 个链接来选择 取消选择每个复选框 这是选择全部的一个 a href Select all a 和 JavaScript functio
  • 全局定义的 AngularJS 控制器和封装

    根据 AngularJS 的教程 控制器函数仅位于全局范围内 http docs angularjs org tutorial step 04 http docs angularjs org tutorial step 04 控制器函数本身
  • Google 地图 v3 中标准缩放控件的样式

    有没有一种简单的方法可以在 Google Maps JavaScript API v3 中设置缩放控件的样式 我想要的只是改变标准图像 http maps gstatic com intl en ALL mapfiles mapcontro
  • Tween JS 基础知识之三个 JS 立方体

    我是 Tween JS 的新手 尝试使用 Tween 制作一个向右移动的简单动画 下面是我在 init 函数中的代码 我使用的是三个 JS var geometry new THREE CylinderGeometry 200 200 20
  • 获取 2 个日期之间的月份名称

    我有两个约会from and to 我想获取这两个日期之间的所有月份名称 以下是我的代码 var monthNames January February March April May June July August September
  • 盒式捆绑包与 MVC4 捆绑包

    我目前正在开发一个原型 ASP NET MVC 3 解决方案 该解决方案将用作多个项目重写的基础 来自 Web 表单 我的目标之一是跨应用程序实现一些脚本管理 而不是我们目前没有的目标 MVC 3有一个缺陷恕我直言 如果您需要在部分视图或模
  • 使用 JavaScript 从 URL 变量读取来加载不同的 CSS 样式表

    我试图在我的 WordPress 博客上使用两个不同的样式表 以便在通过 Web 访问页面时使用一个样式表 而在通过我们的 iOS 应用程序访问博客内容时使用另一个样式表 现在 我们将 app true 附加到来自 iOS 应用程序的 UR
  • 响应式菜单:悬停子菜单显示错误

    简而言之 我根据教程创建了一个响应式菜单 当您将鼠标悬停在投资组合按钮上时 菜单应该显示子菜单 而在移动模式下 您需要按该按钮才能显示子菜单 效果很好 问题是该教程有一个错误 如果您在桌面模式下按组合按钮 子菜单将不会再次显示 除非您按 单
  • 地址更改时如何停止 Angular 重新加载

    我正在使用 Angular 的scrollTo and anchorScroll像这样 app controller TestCtrl function scope location anchorScroll scope scrollTo
  • 如何仅在第一次访问时弹出模态窗口

    我有一个模式窗口 当您访问某个页面时会弹出 访客必须选择我同意或我不同意 我需要一个漂亮的小 jquery 脚本 它会记住谁之前访问过该页面并同意 这样他们每次访问该页面时就不会弹出模式 有人可以推荐一个好的脚本来使用吗 这是代码 div

随机推荐

  • R 中最快的列排序

    我有一个数据框full我想从中取出最后一列和一列v 然后我想对两列进行排序v以尽可能最快的方式 full从 csv 中读取 但这可以用于测试 包括一些真实性的 NA n lt 200000 full lt data frame A runi
  • 基本 CSS 功能在 IE8 中不起作用

    我在这里完全不知所措 我正在开发一个网站 需要支持大量使用 IE8 的用户 一切都可以在 IE9 及更高版本以及 Chrome Firefox 和 Safari 中运行 但我一生都无法获得基本的 CSS 例如高度属性 来在 IE8 中一致工
  • 如何创建从左下角到右上角的动态对角线?

    我创建了一个简单的布局 其中有三个可以交互的 div 一个是屏幕中间的徽标 另一个是使用 jQuery 将两个块移出屏幕 我用的是skewCSS 中应用度数转换的选项 我想根据屏幕应用一定的程度 因此该程度将正确应用于所有屏幕 视觉示例 h
  • 如何使用TabNavigator的tabBarComponent?标签栏不显示

    我正在尝试制作自己的自定义选项卡栏 似乎 tabBarComponent 是通过设置为我自己的组件来实现此目的的方法 使用下面的代码我的标签栏不会显示 const TabNav TabNavigator LaunchScreen scree
  • 查询SQL Server上存储过程的内容

    我正在探索一个遗留数据库系统 对其内部结构知之甚少 我想找到调用另一个存储过程的所有存储过程A 如何最好地做到这一点 我可以写这样的伪代码吗 select name from AllStoredProcedures as Asp where
  • 为什么 C++ 中必须声明函数,而 C 中则不然?

    所以我之前的一次考试有这个问题 到目前为止我一直在读你不需要任何语言的声明 哪个是对的 如果没有声明 C 会报错还是会运行 在涉及 C 和 C 的讨论中 函数声明 是一个相当模糊的术语 这些语言在这方面有很大不同 在C 语言中只有一种函数声
  • javascript、getelementsbyname 和焦点

    我正在尝试创建一个函数 该函数将查看用户名 如果无效 然后向用户发送警报 清除用户名字段 然后将用户名字段重新置于焦点中 我正在尝试使用 getElementsBynName 函数来完成这一切 除了让现场重新成为焦点之外 一切都在进行 我的
  • Theano.function 中“给定”变量的用途

    我正在阅读以下给出的逻辑函数的代码http deeplearning net tutorial logreg html http deeplearning net tutorial logreg html 我对之间的区别感到困惑inputs
  • 如何正确等待浏览器重排/重绘完成

    假设我有一个复杂的 HTML 组件 我想要为其设置动画 但每次需要设置动画时 都需要完成几件事 例如渲染新的 HTML 组件 设置高度 附加 css 类等 如果动画在浏览器重排 重绘过程中触发 这可能会导致动画不平滑 我可以使用 setTm
  • 合并 JSON 对象数组并使用 Javascript 进行排序

    我有一个包含 12 个数组的 JSON 对象 国家不同地区 我正在尝试将此数组合并到选择下拉菜单中 JSON 看起来像这样 latinamerica Argentina Bolivia Brazil Chile Colombia Ecuad
  • 未找到 Laravel 自定义特征

    我对特质很陌生 但我想尝试一下 但是 它似乎没有加载 我在 Laravel 应用程序目录下的文件夹中创建了一个名为 CheckPermsAgainstObjectTrait php 的特征 app Helpers 这是特征代码
  • TypeError:无法读取未定义的属性“map” - 如何访问本地 json API 中的数组

    我能够使用 fetch 在本地导入 api JSON 该 api 可在this http www recipepuppy com apiurl 如果你想查看它 问题如下 当传递状态 searchString 时 出现以下错误 类型错误 无法
  • 在视图中尝试捕获是不好的做法吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在 MVC3 应用程序中 在 razor 块内使用 try catch 块是否被认为是不好的做法 in the cshtml view 非常如此
  • 在 Swift 1.1 中重写初始值设定项的正确方法

    这曾经在 Xcode 6 1 beta 中工作 class MainViewController NSViewController convenience override init self init nibName MainView b
  • 生成随机颜色

    我正在使用此代码生成随机颜色 工作正常 r rand 128 255 g rand 128 255 b rand 128 255 color dechex r dechex g dechex b return color 我只是想知道是否有
  • Flash,ActionScript 3:获取影片剪辑中包含的所有影片剪辑

    以免说我有一个 movieClip A 其中包含 movieClip B1 B2 B3 B4 B5 我在 A 中编写代码来接收 a 包含的所有影片剪辑并打印名称 我尝试了这个但没有成功 for each a MovieClip in thi
  • Supertest 在 Node 中进行 Jest 测试时给出 MaxListenersExceedingWarning 错误

    我正在努力使用 Jest 和 Supertest 以及我的 Node Express 应用程序来设置一些测试 我还使用 Sentry 来报告我的错误 我的 app js 文件中有以下几行代码来设置 Sentry app js Sentry
  • 读取具有定义格式的二进制文件的最快方法?

    我有具有预定义格式的大型二进制数据文件 最初由 Fortran 程序以小端方式编写 我想以最快 最有效的方式读取这些文件 因此使用array https docs python org 3 library array html包裹似乎正合我
  • 无法使用 eclipse 在 Java 中进行调试

    我正在尝试使用 Eclipse 作为 IDE 在我的机器上调试一个简单的 Java 应用程序 当我尝试通过进入调试视角来调试应用程序时 我设置了一个断点并开始调试 几秒钟之内 弹出如下窗口 Launching unicodeRead has
  • 为什么 `/\:/u` 会抛出“无效转义”错误? [复制]

    这个问题在这里已经有答案了 我有这样的代码 url match https ui ESLint 说Parsing error Invalid regular expression https Invalid escape 我不明白为什么这个