Por ejemplo, para hacer coincidir la primera barra inclinada después del nombre de dominio en la URL.
Intención: solo coincide con '/' en '.com/...' pero no con '/' en 'https://' .
url = 'https://example.com/...'; [ url.match( /(?<!\/)(?<slash>\/)(?!\k<slash>).../), // [A] url.match(/(?<!\k<slash>)(?<slash>\/)(?!\k<slash>).../) // [B] ] La [A] anterior devuelve la coincidencia correcta, pero [B] es el tipo de expresión que quiero (aunque no coincide con ningún carácter), es decir, usar el carácter / solo 1 vez en el cuerpo de los literales de expresiones regulares.
¿Existe una forma generalizada de expresión similar a [B] (usando grupos de captura o similares) y usando solo expresiones regulares literales (en lugar de usar el constructor ( RegExp ))?
Puede poner una mirada positiva hacia atrás después de un carácter opcional dentro de una mirada hacia adelante negativa. El lookbehind afirma 2 barras diagonales consecutivas (usando una referencia). De esta manera, el lookbehind prueba la posición de la barra capturada y también la posición anterior. Obviamente, cuando tiene éxito, la anticipación negativa falla.
/(\/)(?!.?(?<=\1{2}))/(siéntase libre de usar capturas con nombre)
o sin capturas:
/\/(?!.?(?<=\/\/))/Si todas sus entradas son URL, esto hará lo que quiera:
/\/\/.+?(\/)/Y luego captura el primer grupo:
url = 'https://example.com/...'; const matches = url.match(/\/\/.+?(\/)/); console.log(matches[1]);