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

304
Vistas
Cómo detectar el patrón de expresiones regulares para cadenas con guión bajo

Estoy tratando de crear una expresión regular para detectar el número exacto de ocurrencias de una cadena en otra cadena.

 function countOccurences(string, word) { var regex = new RegExp("\\b" + word + "\\b", "gi"); return (string.match(regex) || []).length; } var str = "TEST Testing TeSt case-test case@test <h1>Test</h1> www.test.com TEST_UF_3780_nix_inputs r_test regex-test_"; var asset = "test"; console.log(countOccurences(str, asset));

Aquí obtengo la coincidencia exacta para la cadena de "prueba" y nada más, pero está ignorando todas las cadenas de "prueba" que tienen un guión bajo asociado, ya sea al frente o al reverso ( como TEST_UF ... o r_test o regex-test_ , el no se detecta la cadena de "prueba" ). Necesito ayuda para detectar incluso esas cadenas.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

\b coincide con un límite de palabra , que es cuando un carácter de palabra (es decir, uno que coincide con \w ) se encuentra con un carácter que no es una palabra. Hacer coincidir los límites de las palabras como este es útil en muchos contextos porque no captura un carácter, pero se está encontrando con el problema de que '_' es un carácter de palabra, por lo que si está buscando límites de palabras, entonces no va. para encontrar '_test' .

Los caracteres de las palabras en las expresiones regulares de JavaScript son [A-Za-z0-9_] . Siempre que trate los números de la misma manera que las letras, el guión bajo debe ser el único carácter inusual que debe tener en cuenta. Sin embargo, como no desea capturar el guión bajo, querrá usar un lookahead y un lookbehind .

Prueba esto:

 function countOccurences(string, word) { var regex = new RegExp("(\\b|(?<=_))" + word + "(\\b|(?=_))", "gi"); return (string.match(regex) || []).length; } var str = "TEST Testing TeSt case-test case@test <h1>Test</h1> www.test.com TEST_UF_3780_nix_inputs r_test regex-test_"; var asset = "test"; console.log(countOccurences(str, asset));

Ese ejemplo encuentra 9 instancias de 'test' en su cadena de prueba cuando no es parte de otra palabra (por ejemplo 'Testing' ), que creo que es lo que espera.

Sin embargo, debe tener en cuenta que la compatibilidad con la sintaxis de búsqueda posterior solo se agregó en ES 2018. Si necesita compatibilidad con navegadores no modernos, como IE11, o si necesita compatibilidad con Safari, este enfoque no funcionará para usted.

Sin embargo, si solo le importa contar las ocurrencias, entonces no importa si hace coincidir el carácter, por lo que podría eliminar la sintaxis de mirar hacia adelante y mirar hacia atrás y solo hacer coincidir para _ directamente.

 function countOccurences(string, word) { var regex = new RegExp("(\\b|_)" + word + "(\\b|_)", "gi"); return (string.match(regex) || []).length; } var str = "TEST Testing TeSt case-test case@test <h1>Test</h1> www.test.com TEST_UF_3780_nix_inputs r_test regex-test_"; var asset = "test"; console.log(countOccurences(str, asset));

about 4 years ago · Juan Pablo Isaza 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