Skip to content

Commit 045c569

Browse files
committed
finish translation
1 parent d43daf7 commit 045c569

File tree

5 files changed

+102
-100
lines changed

5 files changed

+102
-100
lines changed

9-regular-expressions/08-regexp-character-sets-and-ranges/1-find-range-1/solution.md

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
Answers: **no, yes**.
1+
Respostas: **não, sim**.
22

3-
- In the script `subject:Java` it doesn't match anything, because `pattern:[^script]` means "any character except given ones". So the regexp looks for `"Java"` followed by one such symbol, but there's a string end, no symbols after it.
3+
- Não, na string `subject:Java` o padrão não casa com nada. O padrão `pattern:[^script]` significa "qualquer caractere exceto os dados". Dessa forma, a regex procura por `"Java"`, seguido de qualquer caractere (exceto os do conjunto), mas encontra apenas o fim da string.
44

55
```js run
66
alert( "Java".match(/Java[^script]/) ); // null
77
```
8-
- Yes, because the `pattern:[^script]` part matches the character `"S"`. It's not one of `pattern:script`. As the regexp is case-sensitive (no `pattern:i` flag), it treats `"S"` as a different character from `"s"`.
8+
9+
- Sim, já que o padrão `pattern:[^script]` casa com o caractere `"S"` que não é nenhum dos caracteres `pattern:script`. Como a regex é sensível a capitalização (*case-sensitive*, sem a flag `pattern:i`), ela trata `"S"` e `"s"` como caracteres diferentes.
910

1011
```js run
1112
alert( "JavaScript".match(/Java[^script]/) ); // "JavaS"
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Java[^script]
22

3-
We have a regexp `pattern:/Java[^script]/`.
3+
Dada a regex `pattern:/Java[^script]/`, responda:
44

5-
Does it match anything in the string `subject:Java`? In the string `subject:JavaScript`?
5+
Ela casa com qualquer coisa na string `subject:Java`? E na string `subject:JavaScript`?
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
Answer: `pattern:\d\d[-:]\d\d`.
1+
Resposta: `pattern:\d\d[-:]\d\d`.
22

33
```js run
44
let regexp = /\d\d[-:]\d\d/g;
5-
alert( "Breakfast at 09:00. Dinner at 21-30".match(regexp) ); // 09:00, 21-30
5+
alert( "Café da manhã as 09:00. Jantar as 21-30".match(regexp) ); // 09:00, 21-30
66
```
77

8-
Please note that the dash `pattern:'-'` has a special meaning in square brackets, but only between other characters, not when it's in the beginning or at the end, so we don't need to escape it.
8+
Lembre-se que o hífen `pattern:'-'` possui um significado especial entre colchetes, mas apenas quando está entre outros caracteres, não quando está no começo ou no final do conjunto, descartando a necessidade de escapá-lo.
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
# Find the time as hh:mm or hh-mm
1+
# Encontre o horário no formato hh:mm ou hh-mm
22

3-
The time can be in the format `hours:minutes` or `hours-minutes`. Both hours and minutes have 2 digits: `09:00` or `21-30`.
3+
A string pode estar no formato `horas:minutos` ou `horas-minutos`. Ambas horas e minutos são compostas de 2 dígitos: `09:00` ou `21-30`.
44

5-
Write a regexp to find time:
5+
Escreva uma regex que case com o horário:
66

77
```js
88
let regexp = /your regexp/g;
9-
alert( "Breakfast at 09:00. Dinner at 21-30".match(regexp) ); // 09:00, 21-30
9+
alert( "Café da manhã as 09:00. Jantar as 21-30".match(regexp) ); // 09:00, 21-30
1010
```
1111

12-
P.S. In this task we assume that the time is always correct, there's no need to filter out bad strings like "45:67". Later we'll deal with that too.
12+
P.S. Assuma para essa tarefa que o horário sempre estará correto, e não é necessário filtrar casos impossíveis, como "45:67". Aprenderemos a lidar com esses casos mais a frente também.
Original file line numberDiff line numberDiff line change
@@ -1,197 +1,198 @@
1-
# Sets and ranges [...]
1+
# Conjuntos e alcances [...]
22

3-
Several characters or character classes inside square brackets `[…]` mean to "search for any character among given".
3+
Caracteres ou classes de caracteres dentro de colchetes `[…]` significam "case com qualquer caractere dentre os fornecidos".
44

5-
## Sets
5+
## Conjuntos
66

7-
For instance, `pattern:[eao]` means any of the 3 characters: `'a'`, `'e'`, or `'o'`.
7+
O padrão `pattern:[eao]`, por exemplo, casa com qualquer um dos 3 caracteres: `'a'`, `'e'`, or `'o'`.
88

9-
That's called a *set*. Sets can be used in a regexp along with regular characters:
9+
Isso é chamado de *conjunto*. Conjuntos podem ser usados numa regex como qualquer outro caractere normal:
1010

1111
```js run
12-
// find [t or m], and then "op"
12+
// Case case [t ou m], e então "op"
1313
alert( "Mop top".match(/[tm]op/gi) ); // "Mop", "top"
1414
```
1515

16-
Please note that although there are multiple characters in the set, they correspond to exactly one character in the match.
16+
Repare que mesmo que um conjunto possui múltiplos caracteres, ele casa com apenas um caractere por vez.
1717

18-
So the example below gives no matches:
18+
Dessa maneira, o exemplo abaixo não casa com nada:
1919

2020
```js run
21-
// find "V", then [o or i], then "la"
22-
alert( "Voila".match(/V[oi]la/) ); // null, no matches
21+
// Case com "V", depois [o ou i], e então "la"
22+
alert( "Voila".match(/V[oi]la/) ); // null, nenhum casamento
2323
```
2424

25-
The pattern searches for:
25+
O padrão está procurando por:
2626

2727
- `pattern:V`,
28-
- then *one* of the letters `pattern:[oi]`,
29-
- then `pattern:la`.
28+
- seguido de apenas *uma* das letras `pattern:[oi]`,
29+
- seguido de `pattern:la`.
3030

31-
So there would be a match for `match:Vola` or `match:Vila`.
31+
Então casaríamos com `match:Vola` ou `match:Vila`.
3232

33-
## Ranges
33+
## Alcances
3434

35-
Square brackets may also contain *character ranges*.
35+
Colchetes também podem conter *alcances de caracteres*.
3636

37-
For instance, `pattern:[a-z]` is a character in range from `a` to `z`, and `pattern:[0-5]` is a digit from `0` to `5`.
37+
Por exemplo, `pattern:[a-z]` é qualquer caractere entre `a` e `z`, e `pattern:[0-5]` é qualquer dígito entre `0` e `5`.
3838

39-
In the example below we're searching for `"x"` followed by two digits or letters from `A` to `F`:
39+
No exemplo abaixo estamos buscado por um `"x"` seguido de dois dígitos ou letras de `A` a `F`:
4040

4141
```js run
4242
alert( "Exception 0xAF".match(/x[0-9A-F][0-9A-F]/g) ); // xAF
4343
```
4444

45-
Here `pattern:[0-9A-F]` has two ranges: it searches for a character that is either a digit from `0` to `9` or a letter from `A` to `F`.
45+
O padrão `pattern:[0-9A-F]` tem dois alcances: Ele casa com dígitos de `0` a `9` ou uma letra de `A` a `F`.
4646

47-
If we'd like to look for lowercase letters as well, we can add the range `a-f`: `pattern:[0-9A-Fa-f]`. Or add the flag `pattern:i`.
47+
Se quisermos casar com letras minúsculas também, podemos adicionar o alcance `a-f` (`pattern:[0-9A-Fa-f]`), ou adicionar a flag `pattern:i`.
4848

49-
We can also use character classes inside `[…]`.
49+
Também podemos usar classes de caracteres dentro do `[…]`.
5050

51-
For instance, if we'd like to look for a wordly character `pattern:\w` or a hyphen `pattern:-`, then the set is `pattern:[\w-]`.
51+
Se quisermos, por exemplo, casar com um caractere "de palavra" `pattern:\w` ou um hífen `pattern:-`, o conjunto fica `pattern:[\w-]`
5252

53-
Combining multiple classes is also possible, e.g. `pattern:[\s\d]` means "a space character or a digit".
53+
Também é possível combinar várias classes; o padrão `pattern:[\s\d]`, por exemplo, significa "um caractere de espaço ou um dígito".
5454

55-
```smart header="Character classes are shorthands for certain character sets"
56-
For instance:
55+
```smart header="Classes de caracteres são atalhos para certos conjuntos de caracteres"
56+
Por exemplo:
5757
58-
- **\d** -- is the same as `pattern:[0-9]`,
59-
- **\w** -- is the same as `pattern:[a-zA-Z0-9_]`,
60-
- **\s** -- is the same as `pattern:[\t\n\v\f\r ]`, plus few other rare Unicode space characters.
58+
- **\d** -- é o mesmo padrão que `pattern:[0-9]`,
59+
- **\w** -- é o mesmo padrão que `pattern:[a-zA-Z0-9_]`,
60+
- **\s** -- é o mesmo padrão que `pattern:[\t\n\v\f\r ]`, com a adição de mais alguns caracteres Unicode de espaço raros.
6161
```
6262

63-
### Example: multi-language \w
63+
### Exemplo: \w multilinguagens
6464

65-
As the character class `pattern:\w` is a shorthand for `pattern:[a-zA-Z0-9_]`, it can't find Chinese hieroglyphs, Cyrillic letters, etc.
65+
Como a classe de caracteres `pattern:\w` é um atalho para `pattern:[a-zA-Z0-9_]`, ele não casa com ideogramas, letras cirílicas, etc.
6666

67-
We can write a more universal pattern, that looks for wordly characters in any language. That's easy with Unicode properties: `pattern:[\p{Alpha}\p{M}\p{Nd}\p{Pc}\p{Join_C}]`.
67+
Nós podemos escrever um padrão mais universal, que casa com caracteres usados em palavras de qualquer língua. Fica fácil usando propriedades Unicode: `pattern:[\p{Alpha}\p{M}\p{Nd}\p{Pc}\p{Join_C}]`.
6868

69-
Let's decipher it. Similar to `pattern:\w`, we're making a set of our own that includes characters with following Unicode properties:
69+
Vamos decifrar o padrão. Similarmente ao `pattern:\w`, estamos criando nosso próprio conjunto que inclui caracteres com as seguintes propriedades Unicode:
7070

71-
- `Alphabetic` (`Alpha`) - for letters,
72-
- `Mark` (`M`) - for accents,
73-
- `Decimal_Number` (`Nd`) - for digits,
74-
- `Connector_Punctuation` (`Pc`) - for the underscore `'_'` and similar characters,
75-
- `Join_Control` (`Join_C`) - two special codes `200c` and `200d`, used in ligatures, e.g. in Arabic.
71+
- `Alphabetic` (`Alpha`) - para letras,
72+
- `Mark` (`M`) - para acentos,
73+
- `Decimal_Number` (`Nd`) - para dígitos,
74+
- `Connector_Punctuation` (`Pc`) - para o *underscore* `'_'` e caracteres similares,
75+
- `Join_Control` (`Join_C`) - para dois códigos especiais, `200c` e `200d`, usados em ligaturas Árabes, por exemplo.
7676

77-
An example of use:
77+
Vejamos um caso de uso:
7878

7979
```js run
8080
let regexp = /[\p{Alpha}\p{M}\p{Nd}\p{Pc}\p{Join_C}]/gu;
8181

8282
let str = `Hi 你好 12`;
8383

84-
// finds all letters and digits:
84+
// Encontra todas as letras e dígitos:
8585
alert( str.match(regexp) ); // H,i,你,好,1,2
8686
```
8787

88-
Of course, we can edit this pattern: add Unicode properties or remove them. Unicode properties are covered in more details in the article <info:regexp-unicode>.
88+
E claro, podemos mudar esse padrão adicionando ou removendo propriedades Unicode. Propriedades Unicode são discutidas em maior profundidade no artigo <info:regexp-unicode>.
8989

90-
```warn header="Unicode properties aren't supported in IE"
91-
Unicode properties `pattern:p{…}` are not implemented in IE. If we really need them, we can use library [XRegExp](https://xregexp.com/).
90+
```warn header="Propriedades Unicode não são suportadas no IE"
91+
Propriedades Unicode `pattern:p{…}` não são implementadas no Internet Explorer. Se for realmente necessário dar suporte ao navegador, pode-se usar uma biblioteca como a [XRegExp](https://xregexp.com/).
9292
93-
Or just use ranges of characters in a language that interests us, e.g. `pattern:[а-я]` for Cyrillic letters.
93+
Outra opção é utilizar alcances de caracteres da língua relevante, como `pattern:[а-я]` para o alfabeto cirílico, por exemplo.
9494
```
9595

96-
## Excluding ranges
96+
## Alcances negados
9797

98-
Besides normal ranges, there are "excluding" ranges that look like `pattern:[^…]`.
98+
Além dos alcances normais, existem os alcances negados que usam a sintaxe `pattern:[^…]`.
9999

100-
They are denoted by a caret character `^` at the start and match any character *except the given ones*.
100+
Eles são demarcados pelo acento circunflexo `^` no começo e casam com qualquer caractere *exceto os incluídos no alcance*
101101

102-
For instance:
102+
Por exemplo:
103103

104-
- `pattern:[^aeyo]` -- any character except `'a'`, `'e'`, `'y'` or `'o'`.
105-
- `pattern:[^0-9]` -- any character except a digit, the same as `pattern:\D`.
106-
- `pattern:[^\s]` -- any non-space character, same as `\S`.
104+
- `pattern:[^aeyo]` -- casa qualquer caractere exceto `'a'`, `'e'`, `'y'` e `'o'`.
105+
- `pattern:[^0-9]` -- casa qualquer caractere exceto um dígito, equivalente ao `pattern:\D`.
106+
- `pattern:[^\s]` -- casa qualquer caractere que não seja um espaço em branco, equivalente ao `\S`.
107107

108-
The example below looks for any characters except letters, digits and spaces:
108+
O exemplo abaixo busca por qualquer caractere que não seja uma letra, um dígito ou um espaço:
109109

110110
```js run
111-
alert( "[email protected]".match(/[^\d\sA-Z]/gi) ); // @ and .
111+
alert( "[email protected]".match(/[^\d\sA-Z]/gi) ); // @ e .
112112
```
113113

114-
## Escaping in []
114+
## Escapes dentro do []
115115

116-
Usually when we want to find exactly a special character, we need to escape it like `pattern:\.`. And if we need a backslash, then we use `pattern:\\`, and so on.
116+
Normalmente quando queremos encontrar um caractere especial precisamos escapá-lo com a contrabarra `pattern:\.`. Se precisamos casar com uma contrabarra, escapamos ela também (`pattern:\\`), e assim por diante
117117

118-
In square brackets we can use the vast majority of special characters without escaping:
118+
Dentro de colchetes podemos usar a grande maioria de caracteres especiais sem nenhum escape:
119119

120-
- Symbols `pattern:. + ( )` never need escaping.
121-
- A hyphen `pattern:-` is not escaped in the beginning or the end (where it does not define a range).
122-
- A caret `pattern:^` is only escaped in the beginning (where it means exclusion).
123-
- The closing square bracket `pattern:]` is always escaped (if we need to look for that symbol).
120+
- Os símbolos `pattern:. + ( )` nunca precisam de escape.
121+
- Um hífen `pattern:-` não precisa ser escapado se estiver no começo ou no final do conjunto(onde ele não define nenhum alcance).
122+
- O acento circunflexo `pattern:^` só precisa ser escapado caso seja o primeiro elemento do conjunto (onde ele sinaliza a negação do conjunto).
123+
- O colchete direito `pattern:]` sempre deve ser escapado (caso precisemos buscar por ele).
124124

125-
In other words, all special characters are allowed without escaping, except when they mean something for square brackets.
125+
Em outras palavras, todos os caracteres especiais podem ser usados sem escapes, exceto nos casos onde eles modificam o comportamento do conjunto em si.
126126

127-
A dot `.` inside square brackets means just a dot. The pattern `pattern:[.,]` would look for one of characters: either a dot or a comma.
127+
O ponto `.` dentro de um conjunto representa um ponto literal. O padrão `pattern:[.,]` casa com um ponto ou uma vírgula.
128128

129-
In the example below the regexp `pattern:[-().^+]` looks for one of the characters `-().^+`:
129+
No exemplo abaixo, a expressão `pattern:[-().^+]` casa com qualquer um dos caracteres `-().^+`:
130130

131131
```js run
132-
// No need to escape
132+
// Não é necessário escapar nada
133133
let regexp = /[-().^+]/g;
134134

135-
alert( "1 + 2 - 3".match(regexp) ); // Matches +, -
135+
alert( "1 + 2 - 3".match(regexp) ); // Casa com +, -
136136
```
137137

138-
...But if you decide to escape them "just in case", then there would be no harm:
138+
...Mas caso você queira escapar "só para garantir", o efeito é o mesmo:
139139

140140
```js run
141-
// Escaped everything
141+
// Tudo escapado
142142
let regexp = /[\-\(\)\.\^\+]/g;
143143

144-
alert( "1 + 2 - 3".match(regexp) ); // also works: +, -
144+
alert( "1 + 2 - 3".match(regexp) ); // Também casa: +, -
145145
```
146146

147-
## Ranges and flag "u"
147+
## Alcances e a flag "u"
148148

149-
If there are surrogate pairs in the set, flag `pattern:u` is required for them to work correctly.
149+
Se existem pares substitutos no conjunto, a flag `pattern:u` é obrigatória para garantir seu funcionamento correto.
150150

151-
For instance, let's look for `pattern:[𝒳𝒴]` in the string `subject:𝒳`:
151+
No exemplo abaixo queremos casar com o padrão `pattern:[𝒳𝒴]` na string `subject:𝒳`:
152152

153153
```js run
154-
alert( '𝒳'.match(/[𝒳𝒴]/) ); // shows a strange character, like [?]
155-
// (the search was performed incorrectly, half-character returned)
154+
alert( '𝒳'.match(/[𝒳𝒴]/) ); // Mostra um caractere estranho, como um [?]
155+
// (A pesquisa não teve sucesso, retornamos apenas metade de um caractere)
156156
```
157157

158-
The result is incorrect, because by default regular expressions "don't know" about surrogate pairs.
158+
O resultado está errado, já que a a expressão regular "não enxerga" o par substituto.
159159

160-
The regular expression engine thinks that `[𝒳𝒴]` -- are not two, but four characters:
161-
1. left half of `𝒳` `(1)`,
162-
2. right half of `𝒳` `(2)`,
163-
3. left half of `𝒴` `(3)`,
164-
4. right half of `𝒴` `(4)`.
160+
O interpretador de expressões regulares pensa que o conjunto `[𝒳𝒴]` contém quatro caracteres, não dois:
165161

166-
We can see their codes like this:
162+
1. Metade esquerda do `𝒳` `(1)`,
163+
2. Metade direita do `𝒳` `(2)`,
164+
3. Metade esquerda do `𝒴` `(3)`,
165+
4. Metade direita do `𝒴` `(4)`.
166+
167+
Podemos ler seus códigos dessa maneira:
167168

168169
```js run
169170
for(let i=0; i<'𝒳𝒴'.length; i++) {
170171
alert('𝒳𝒴'.charCodeAt(i)); // 55349, 56499, 55349, 56500
171172
};
172173
```
173174

174-
So, the example above finds and shows the left half of `𝒳`.
175+
Por conta disso, o exemplo acima casa apenas com a metade esquerda do `𝒳`.
175176

176-
If we add flag `pattern:u`, then the behavior will be correct:
177+
Agora, se adicionarmos a flag `pattern:u`, o comportamento é o esperado:
177178

178179
```js run
179180
alert( '𝒳'.match(/[𝒳𝒴]/u) ); // 𝒳
180181
```
181182

182-
The similar situation occurs when looking for a range, such as `[𝒳-𝒴]`.
183+
Uma situação parecida acontece quando estamos buscando por um alcance, como `[𝒳-𝒴]`.
183184

184-
If we forget to add flag `pattern:u`, there will be an error:
185+
Se não usarmos a flag `pattern:u`, um erro ocorre:
185186

186187
```js run
187-
'𝒳'.match(/[𝒳-𝒴]/); // Error: Invalid regular expression
188+
'𝒳'.match(/[𝒳-𝒴]/); // Error: Invalid regular expression (Expressão regular inválida)
188189
```
189190

190-
The reason is that without flag `pattern:u` surrogate pairs are perceived as two characters, so `[𝒳-𝒴]` is interpreted as `[<55349><56499>-<55349><56500>]` (every surrogate pair is replaced with its codes). Now it's easy to see that the range `56499-55349` is invalid: its starting code `56499` is greater than the end `55349`. That's the formal reason for the error.
191+
Isso ocorre porque sem a flag `pattern:u`, pares substitutos são percebidos como dois caracteres separados, então o alcance `[𝒳-𝒴]` é interpretado como `[<55349><56499>-<55349><56500>]` (cada par substituto é substituído pelos seus códigos constituintes). Dessa forma é fácil perceber que o alcance `56499-55349` é inválido: Seu código inicial `56499` é maior que seu código final, `55349`, causando o erro.
191192

192-
With the flag `pattern:u` the pattern works correctly:
193+
Com a flag `pattern:u`, entretanto, o padrão funciona como esperado:
193194

194195
```js run
195-
// look for characters from 𝒳 to 𝒵
196+
// Case com caracteres entre 𝒳 e 𝒵
196197
alert( '𝒴'.match(/[𝒳-𝒵]/u) ); // 𝒴
197198
```

0 commit comments

Comments
 (0)