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

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

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 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!