Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

190
Vistas
Cómo detectar exclusivamente subdominios de una URL con una expresión regular

Estoy creando una extensión de Chrome a la que se le proporciona una lista de dominios que deben compararse con la URL activa de una pestaña. Por ejemplo, si la lista de dominios tiene "google", la extensión debería detectar "docs.google.com" como parte de la lista de dominios. He conseguido que esta parte funcione. El problema es cuando la lista de dominios contiene un subdominio. Por ejemplo: si "docs.google" está en la lista, si el usuario está en "google.com", la extensión no debería reconocerlo como una URL en la lista de dominios.

Estoy intentando esto construyendo una expresión regular. para cada dominio y subdominio. Como dije, cuando te dan un dominio (a diferencia de un subdominio) funciona correctamente, aunque lo he probado con subdominios y parece que no funciona. Supongo que el problema es cómo construí el RegEx. ¿Algo que destaque? ¡gracias de antemano!

 let onDomainList = false; for(let i = 0; i < domainListLength-1; i++){ if(!domainList[i].includes(".")){ //if this domain is not a subdomain let strPattern = "^https://www\\." + list.domainList[i].replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + "|https://[a-z_]+\\." + list.domainList[i].replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); let domainRegEx = new RegExp(strPattern,'i'); if(domainRegEx.test(activeTab.url)){ onDomainList = true; execute_script(activeTab); } } else{ //if this domain is a subdomain let strPattern = "^https://www\\." + list.domainList[i].replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); let domainRegEx = new RegExp(strPattern,'i'); if(domainRegEx.test(activeTab.url)){ onDomainList = true; execute_script(activeTab); } } }

EDITAR: Cambió RegEx a lo que sugirió Wiktor Stribizew, aunque sigue siendo el problema de no detectar subdominios.

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Aquí hay un fragmento fijo:

 let onDomainList = false; for (let i = 0; i < domainListLength - 1; i++) { if (!domainList[i].includes(".")) { //if this domain is not a subdomain let strPattern = let strPattern = "^https://www\\." + domainList[i].replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + "|https://[a-z_]+\\." + domainList[i].replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); let domainRegEx = new RegExp(strPattern, 'i'); if (domainRegEx.test(activeTab.url)) { onDomainList = true; execute_script(activeTab); } } else { //if this domain is a subdomain let strPattern = "^https://(?:[^\\s/]*\\.)?" + list.domainList[i].replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); let domainRegEx = new RegExp(strPattern, 'i'); if (domainRegEx.test(activeTab.url)) { onDomainList = true; execute_script(activeTab); } } }

Notas :

  • Dado que está utilizando una notación de constructor RegExp y define la expresión regular con un literal de cadena regular, debe introducir correctamente las barras diagonales inversas utilizadas para escapar de los caracteres especiales. Aquí, no hay necesidad de escapar / y el . necesita dos barras invertidas, "\\." cadena literal es en realidad un \. texto
  • Los textos variables deben escaparse para usarse correctamente en el código, por lo tanto, domainList[i].replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')
  • El / antes de ^ hace que la expresión regular sea inútil ya que no puede haber / antes del comienzo de la cadena y, por lo tanto, /^ es una expresión regular que nunca coincide con ninguna cadena. / como delimitadores de expresiones regulares no deben usarse en la notación del constructor RegExp
  • Una expresión regular de subdominio en realidad no coincide con nada más que https://www. + el dominio de tu lista. Para permitir cualquier cosa antes del dominio, puede reemplazar www\. con (?:[^\s/]*\.)? que coincida con una secuencia opcional ( (?:...)? es un grupo opcional que no captura) de cero o más caracteres que no sean espacios en blanco y / (con la clase de caracteres [^\/s]* negada) y luego un punto .
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda