Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

192
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda