- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
JavaScript 有一个正则表达式类RegExp
。您可以直接创建它们 re = new RegExp(...)
或间接创建它们 re =/.../
大部分传统方法都是我多年编程习惯的
const match = re.match(str);
const isMatch = re.text(str);
但今天我寻找了一个 matchAll 函数并使用它的语法是这样的
const matches = re[Symbol.matchAll](str)
这种查找函数的方式有什么问题?为什么不只是
const matches = re.matchAll(str);
我猜有一些函数使用这种特殊格式是有原因的。其背后的原因是什么?
const re = /a(.)b(.)c/g;
const matches = re[Symbol.matchAll]('a1b2c a3b4c a5b6c');
console.log([...matches]);
最佳答案
I looked for a matchAll function and to use it the syntax is
re[Symbol.matchAll](str)
没有。正确的语法是使用 String matchAll
method ,像这样:
const matches = str.matchAll(re);
What is the reasoning behind several functions using this special format?
他们遵循协议(protocol)。喜欢 iterable protocol或 thenable protocol ,它们通常在某些其他方法/语法中内部使用,不应直接调用。这样的协议(protocol)允许自定义实现该功能,提供一个 Hook 来覆盖。
在Symbol.matchAll
的情况下,它允许将任意对象用作字符串的匹配器。例如:
const integers = {
*[Symbol.matchAll] (str) {
for (const m of str.matchAll(/\d+/g))
yield parseInt(m[0], 10);
}
};
console.log(Array.from("42ab17, 2x".matchAll(integers)))
引入了 matchAll
和 match
符号,以允许 extends RegExp
的 class
在以下情况下覆盖行为与相应的 String
方法进行交互。在实践中,虽然没有强制执行继承关系,但仅存在符号键控方法就足够了。
关于javascript - 为什么 JavaScript 中 RegExp 的 matchAll 与其他方法如此不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56724964/
我正在 Node 中创建一个包来解析和操作 csv,并需要使用 String.matchAll() ,但我收到一条错误消息,指出 str.matchAll 不是函数。我尝试切换到 str.match(
我有一个 KV 的 PCollection,其中键是 gcs file_patterns,值是文件的一些附加信息(例如,生成文件的“源”系统)。例如, KV("gs://bucket1/dir1/*"
我想在字符串上应用正则表达式。为了获得所有组的结果,我使用了 matchAll 方法。这是我的代码 const regexp = RegExp('foo*','g'); const str = "ta
运行我的 React Native 应用程序时出现一个奇怪的错误: 一些示例代码: const { url } = ; const reURL = ; console.debug('url:',
我正在使用 Chrome 并执行一段在 JavaScript 中使用 matchAll() 的代码。但是,我只想在定义了 matchAll() 时使用这段代码,这不适用于 Internet Explo
我正在使用 Chrome 并执行一段在 JavaScript 中使用 matchAll() 的代码。但是,我只想在定义了 matchAll() 时使用这段代码,这不适用于 Internet Explo
从 MDN 文档中它指出 matchAll only returns the first match if the g flag is missing. 但是如果你运行这段代码: const rege
我希望 String.prototype.matchAll() 方法也能在边缘浏览器中工作。所以想到使用 the "string.prototype.matchall" npmjs package 我
我正在尝试找出一种方法,无需使用 matchAll() 循环即可将所有第 1 组匹配项放入一个数组中。 这是我到目前为止所拥有的,但它只产生第一个匹配项: let str = "123ABC, 123
ES2020 包含一个新的 String.prototype.matchAll方法,它返回一个迭代器。我确定我错过了一些愚蠢/明显的东西,但我不明白为什么它不只是返回一个数组。 有人可以解释那里的逻辑
当我测试代码时: let result = 'heymama'.matchAll(/m(a)/g); 我收到错误“ 'heymama'.matchAll 不是函数 ” 当我运行版本时: let res
JavaScript 有一个正则表达式类RegExp。您可以直接创建它们 re = new RegExp(...) 或间接创建它们 re =/.../ 大部分传统方法都是我多年编程习惯的 const
我有一个内存中的 Elasticsearch 实例正在运行,并进行了一些探索性编码以学习搜索 Java API。我能够将文档提交到索引并使用 GET 检索它们,但是当我尝试一个简单的搜索查询时,我没有
我在我们的网络应用程序中缓存了一些数据,例如缩略图和 JSON。现在我想在达到磁盘空间时删除旧数据。 Chrome 在他的 web 工具中显示(不完美,它没有显示 self 创建响应的正确时间)缓存存
关注 Grails 3.0.11 Interceptors文档,我编写自己的拦截器如下: class AuthInterceptor { int order = HIGHEST_PRECEDE
我是一名优秀的程序员,十分优秀!