Skip to content
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

Merged
merged 3 commits into from
Jul 28, 2023

Conversation

JasonLamv-t
Copy link
Member

Description

Same as the title.

Motivation

Ditto.

Additional details

None.

Related issues and pull requests

#13975

@JasonLamv-t JasonLamv-t requested a review from a team as a code owner July 21, 2023 01:17
@JasonLamv-t JasonLamv-t requested review from t7yang and removed request for a team July 21, 2023 01:17
@github-actions github-actions bot added the l10n-zh Issues related to Chinese content. label Jul 21, 2023
@github-actions
Copy link
Contributor

github-actions bot commented Jul 21, 2023

Preview URLs

Flaws (1)

URL: /zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/matchAll
Title: String.prototype.matchAll()
Flaw count: 1

  • broken_links:
    • Can use the English (en-US) link as a fallback
External URLs (1)

URL: /zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/matchAll
Title: String.prototype.matchAll()

(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")}} 异常。
Copy link
Member

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"`),则会抛出该异常。
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same

@@ -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)在内的所有结果
Copy link
Member

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")}} 异常。
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
如果 `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()")}} 的返回值相同。
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
一个匹配结果的[可迭代的迭代器对象](/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"`),则会抛出该异常。
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- : 如果 `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()` 构造函数
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
有了可用的 `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` 会抛出异常。
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
如果没有 `/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` 在字符串扫描时不会改变。
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
`matchAll` 内部做了一个 `regexp` 的复制,所以不像 {{jsxref("Global_Objects/RegExp/exec", "regexp.exec()")}},`lastIndex` 在字符串扫描时不会改变
`matchAll` 内部做了一个 `regexp` 的复制,所以不像 {{jsxref("Global_Objects/RegExp/exec", "regexp.exec()")}},`lastIndex` 在扫描字符串后不会改变


### 比 String.prototype.match() 更好的捕获组获取方式

`matchAll()` 方法的另一个重要优点是改进了对于捕获组的获取方式。
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

请将“方法名加括号”的修改同步至英文文档

```

使用 `matchAll` 可以通过如下方式获取分组捕获
使用 `matchAll()` 方法,可以轻松获取捕获组
Copy link
Member

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()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
### 使用一个没有实现 @@matchAll 的非正则对象调用 matchAll()
### 使用实现了 @@matchAll 的非正则对象调用 matchAll()

@JasonLamv-t JasonLamv-t requested a review from yin1999 July 27, 2023 03:49
Copy link
Member

@yin1999 yin1999 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. Looks better 😉

@yin1999 yin1999 merged commit 9e78c2f into mdn:main Jul 28, 2023
8 checks passed
@JasonLamv-t JasonLamv-t deleted the string-matchAll branch August 1, 2023 01:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
l10n-zh Issues related to Chinese content.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants