Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

189
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!