Resumo : neste tutorial, você aprenderá como usar JavaScript regex lookbehind em expressões regulares para corresponder X
se for precedido por Y
.
Introdução ao lookbehind de regex JavaScript
Em expressões regulares , um lookbehind corresponde a um elemento se houver outro elemento específico antes dele. Um lookbehind tem a seguinte sintaxe:
(?<=Y)X
Nesta sintaxe, o padrão corresponde X
se houver Y
antes dele.
Por exemplo, suponha que você queira corresponder o número 900
e não o número 1
na seguinte string:
'1 computer costs $900'
Linguagem de código: JavaScript ( javascript )
Para fazer isso, você usa uma antecipação na expressão regular da seguinte maneira:
/(?<=\$)\d+/
Nesta expressão regular:
- Corresponde
(?<=\$)
a um elemento se houver uma string literal$
antes dele. Por$
ser um caractere especial na regex, precisamos usar a barra invertida\
para escapar dele. Ao fazer isso, o mecanismo regex trata\$
como um caractere literal$
. - Corresponde a
\d+
um ou mais dígitos.
O exemplo a seguir ilustra como usar um lookbehind em uma expressão regular para corresponder a um número que tem o $
sinal antes dele:
const s = '1 computer costs $900';
const pattern = /(?<=\$)\d+/;
const match = s.match(pattern);
console.log(match);
Linguagem de código: JavaScript ( javascript )
Saída:
[ '900', index: 18, input: '1 computer costs $900', groups: undefined ]
Linguagem de código: JSON/JSON com comentários ( json )
Olhar negativo para trás
Para negar um lookbehind, você usa um lookbehind negativo com a seguinte sintaxe:
(?<!Y)X
Nesta sintaxe, o mecanismo regex corresponde X
se não Y
houver antes dele. O exemplo a seguir usa uma expressão regular com lookbehind negativo para corresponder a um número que não tem a $
letra antes:
const s = '1 computer costs $900';
const pattern = /(?<!\$)\d+/;
const match = s.match(pattern);
console.log(match);
Linguagem de código: JavaScript ( javascript )
Saída:
1
Resumo
- Um lookbehind
(?<!Y)X
correspondeX
apenas se is for precedido porY
. - Um lookbehind negativo
(?<!Y)X
correspondeX
apenas se não for precedido porY
.