-
Notifications
You must be signed in to change notification settings - Fork 8.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[zh-cn]: Update translation of String.matchAll() #14468
Conversation
Preview URLs Flaws (1)URL:
External URLs (1)URL:
(comment last updated: 2023-07-27 03:51:15) |
`RegExp`必须是设置了全局模式`g`的形式,否则会抛出异常`TypeError`。 | ||
如果 `regexp` 不是一个 `RegExp` 对象,并且没有 `Symbol.matchAll` 方法,它将通过 `new RegExp(regexp, 'g')` 被隐式转换为一个 {{jsxref("RegExp")}} 对象。 | ||
|
||
如果 `regexp` 是一个[正则表达式对象](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp#正则表达式的特殊处理),那么它必须设置了全局(`g`) 标志,否则会抛出一个 {{jsxref("TypeError")}} 异常。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
extra space
### 异常 | ||
|
||
- {{jsxref("TypeError")}} | ||
- : 如果 `regexp` 是一个[正则表达式对象](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp#正则表达式的特殊处理),且没有设置全局(`g`) 标志(其 [`flags`](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp/flags) 属性不包含 `"g"`),则会抛出该异常。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same
files/zh-cn/web/javascript/reference/global_objects/string/matchall/index.md
Outdated
Show resolved
Hide resolved
files/zh-cn/web/javascript/reference/global_objects/string/matchall/index.md
Outdated
Show resolved
Hide resolved
@@ -5,107 +5,141 @@ slug: Web/JavaScript/Reference/Global_Objects/String/matchAll | |||
|
|||
{{JSRef}} | |||
|
|||
**`matchAll()`** 方法返回一个包含所有匹配正则表达式的结果及分组捕获组的迭代器。 | |||
**`matchAll()`** 方法返回一个迭代器,用于匹配一个字符串和一个[正则表达式](/zh-CN/docs/Web/JavaScript/Guide/Regular_expressions),包括[捕获组](/zh-CN/docs/Web/JavaScript/Guide/Regular_expressions/Groups_and_backreferences)在内的所有结果。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
翻译再改改
`RegExp`必须是设置了全局模式`g`的形式,否则会抛出异常`TypeError`。 | ||
如果 `regexp` 不是一个 `RegExp` 对象,并且没有 `Symbol.matchAll` 方法,它将通过 `new RegExp(regexp, 'g')` 被隐式转换为一个 {{jsxref("RegExp")}} 对象。 | ||
|
||
如果 `regexp` 是一个[正则表达式对象](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp#正则表达式的特殊处理),那么它必须设置了全局(`g`)标志,否则会抛出一个 {{jsxref("TypeError")}} 异常。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
如果 `regexp` 是一个[正则表达式对象](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp#正则表达式的特殊处理),那么它必须设置了全局(`g`)标志,否则会抛出一个 {{jsxref("TypeError")}} 异常。 | |
如果 `regexp` 是一个[正则表达式](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp#正则表达式的特殊处理),那么它必须设置了全局(`g`)标志,否则会抛出 {{jsxref("TypeError")}} 异常。 |
|
||
### 返回值 | ||
|
||
一个迭代器(不可重用,结果耗尽需要再次调用方法,获取一个新的迭代器)。 | ||
一个匹配结果的[可迭代的迭代器对象](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Iterator)(它不可重新开始)。每个匹配结果都是一个数组,其形状与 {{jsxref("RegExp.prototype.exec()")}} 的返回值相同。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
一个匹配结果的[可迭代的迭代器对象](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Iterator)(它不可重新开始)。每个匹配结果都是一个数组,其形状与 {{jsxref("RegExp.prototype.exec()")}} 的返回值相同。 | |
一个匹配结果的[可迭代迭代器对象](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Iterator)(它不可重新开始)。每个匹配结果都是一个数组,其形状与 {{jsxref("RegExp.prototype.exec()")}} 的返回值相同。 |
### 异常 | ||
|
||
- {{jsxref("TypeError")}} | ||
- : 如果 `regexp` 是一个[正则表达式对象](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp#正则表达式的特殊处理),且没有设置全局(`g`)标志(其 [`flags`](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp/flags) 属性不包含 `"g"`),则会抛出该异常。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- : 如果 `regexp` 是一个[正则表达式对象](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp#正则表达式的特殊处理),且没有设置全局(`g`)标志(其 [`flags`](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp/flags) 属性不包含 `"g"`),则会抛出该异常。 | |
- : 如果 `regexp` 是一个[正则表达式](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp#正则表达式的特殊处理),且没有设置全局(`g`)标志(其 [`flags`](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp/flags) 属性不包含 `"g"`),则会抛出该异常。 |
``` | ||
|
||
如果使用 `matchAll` ,就可以不必使用 while 循环加 exec 方式(且正则表达式需使用 `/g` 标志)。使用 `matchAll` 会得到一个迭代器的返回值,配合 [`for...of`](/zh-CN/docs/Web/JavaScript/Reference/Statements/for...of), [array spread](/zh-CN/docs/Web/JavaScript/Reference/Operators/Spread_syntax), 或者 {{jsxref("Array.from()")}} 可以更方便实现功能: | ||
有了可用的 `matchAll()` 方法,可以避免使用 `while` 循环和带有 `g` 标志的 `exec`。相反,你可以获得一个迭代器,以便使用更方便的 `for...of` 循环、[数组展开语法](/zh-CN/docs/Web/JavaScript/Reference/Operators/Spread_syntax)或者 `Array.from()` 构造函数: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
有了可用的 `matchAll()` 方法,可以避免使用 `while` 循环和带有 `g` 标志的 `exec`。相反,你可以获得一个迭代器,以便使用更方便的 `for...of` 循环、[数组展开语法](/zh-CN/docs/Web/JavaScript/Reference/Operators/Spread_syntax)或者 `Array.from()` 构造函数: | |
如果有 `matchAll()` 方法,则可以避免使用 {{jsxref("Statements/while", "while")}} 循环和带有 `g` 标志的 `exec`。相反,你可以获得一个迭代器,以便使用更方便的 {{jsxref("Statements/for...of", "for...of")}} 循环、[数组展开语法](/zh-CN/docs/Web/JavaScript/Reference/Operators/Spread_syntax)或 `Array.from()` 构造函数: |
// 匹配迭代器在 for...of 迭代后用尽 | ||
// 再次调用 matchAll 以创建新的迭代器 | ||
Array.from(str.matchAll(regexp), (m) => m[0]); | ||
// [ "football", "foosball" ] | ||
``` | ||
|
||
如果没有 `/g` 标志,`matchAll` 会抛出异常。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
如果没有 `/g` 标志,`matchAll` 会抛出异常。 | |
如果没有 `g` 标志,`matchAll` 会抛出异常。 |
``` | ||
|
||
`matchAll` 内部做了一个 regexp 的复制,所以不像 [regexp.exec](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec), `lastIndex` 在字符串扫描时不会改变。 | ||
`matchAll` 内部做了一个 `regexp` 的复制,所以不像 {{jsxref("Global_Objects/RegExp/exec", "regexp.exec()")}},`lastIndex` 在字符串扫描时不会改变。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
`matchAll` 内部做了一个 `regexp` 的复制,所以不像 {{jsxref("Global_Objects/RegExp/exec", "regexp.exec()")}},`lastIndex` 在字符串扫描时不会改变。 | |
`matchAll` 内部做了一个 `regexp` 的复制,所以不像 {{jsxref("Global_Objects/RegExp/exec", "regexp.exec()")}},`lastIndex` 在扫描字符串后不会改变。 |
|
||
### 比 String.prototype.match() 更好的捕获组获取方式 | ||
|
||
`matchAll()` 方法的另一个重要优点是改进了对于捕获组的获取方式。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
请将“方法名加括号”的修改同步至英文文档
``` | ||
|
||
使用 `matchAll` 可以通过如下方式获取分组捕获: | ||
使用 `matchAll()` 方法,可以轻松获取捕获组: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
包括下面的修改
|
||
array[0]; | ||
// ['test1', 'e', 'st1', '1', index: 0, input: 'test1test2', length: 4] | ||
array[1]; | ||
// ['test2', 'e', 'st2', '2', index: 5, input: 'test1test2', length: 4] | ||
``` | ||
|
||
### 使用一个没有实现 @@matchAll 的非正则对象调用 matchAll() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
### 使用一个没有实现 @@matchAll 的非正则对象调用 matchAll() | |
### 使用实现了 @@matchAll 的非正则对象调用 matchAll() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks. Looks better 😉
Description
Same as the title.
Motivation
Ditto.
Additional details
None.
Related issues and pull requests
#13975