SyntaxError: flag de expressão regular inválida "x"
A exceção JavaScript "flag de expressão regular inválida" ocorre quando as flags de uma expressão regular contêm qualquer flag que não seja uma das flag: g
, i
, m
, s
, u
, y
ou d
.
Também pode ser lançada se a expressão contiver mais do que uma instância de uma flag válida.
Mensagem
SyntaxError: Invalid regular expression flags (V8-based) SyntaxError: invalid regular expression flag x (Firefox) SyntaxError: Invalid regular expression: invalid flags (Safari)
Tipo de erro
O que ocorreu de errado?
A expressão regular contém flags inválidas, ou foram utilizadas flags válidas mais de uma vez na expressão.
As flags válidas (permitidas) são listadas em Expressões regulares > Pesquisa avançada com flags, e reproduzidas abaixo:
Flag | Descrição |
---|---|
g |
Pesquisa Global. Veja global |
i |
Pesquisa case-sensitive. Veja ignoreCase . |
m |
Pesquisa em múltiplas linhas. Veja multiline . |
s |
Permitir que . se igualem a novas linhas. Veja dotAll . |
u |
Unicode; trata um padrão como uma sequência de pontos de código Unicode. Veja unicode . |
y |
Realiza uma pesquisa "sticky" que coincida a partir da posição atual na cadeia de destino. Veja sticky |
d |
Índices. Geração de índices para a correspondência de substrato. Veja hasIndices |
Exemplos
Em uma expressão regular literal, que consiste em um padrão fechado entre barras, as flags são definidas após a segunda barra. As flags de expressão regular podem ser utilizadas separadamente ou em conjunto em qualquer ordem. Esta sintaxe mostra como declarar as flags usando a expressão regular literal:
const re = /pattern/flags;
Podem também ser definidos na função construtora do objecto RegExp
(segundo parâmetro):
const re = new RegExp("pattern", "flags");
Aqui está um exemplo que mostra a utilização apenas de flags corretas.
/foo/g;
/foo/gims;
/foo/uy;
Abaixo está um exemplo que mostra a utilização de algumas flags inválidas b
, a
e r
:
/foo/bar;
// SyntaxError: invalid regular expression flag "b"
O código abaixo está incorrecto, porque W
, e
e b
não são flags válidas.
const obj = {
url: /docs/Web,
};
// SyntaxError: invalid regular expression flag "W"
Uma expressão contendo duas barras é interpretada como uma expressão regular literal. Muito provavelmente a intenção era criar uma cadeia literal, usando citações simples ou duplas, como se mostra abaixo:
const obj = {
url: "/docs/Web",
};
Veja também
- Expressões Regulares
- XRegEx flags – biblioteca de expressões regulares que fornece quatro novas bandeiras (
n
,s
,x
,A
)