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

225
Views
Divida una cadena con RegExp que coincida con cada subcadena. Toda la cadena debe coincidir completamente

Necesito dividir una cadena. Tengo una expresión regular capaz de hacer coincidir cada subcadena por completo.

Intenté usarlo con String.prototype.matchAll() y puede dividirse, pero esa función también acepta "tokens no válidos": partes de la cadena que no coinciden con mi expresión regular. Por ejemplo:

 var re = /\s*(\w+|"[^"]*")\s*/g // matches a word or a quoted string var str = 'hey ??? "a"b' // the '???' part is not a valid token var match = str.matchAll(re) for(var m of match){ console.log("Matched:", m[1]) }

Me da el token hey , "a" y b . De hecho, esas son las subcadenas que coinciden con mi expresión regular, pero me hubiera gustado obtener un error en este caso, ya que la cadena contiene ??? que no es una subcadena válida.

¿Cómo puedo hacer esto?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

La expresión regular /\s*(\w+|"[^"]*")\s*/g se usa para extraer múltiples coincidencias de patrones de una cadena, no está destinada a validar una cadena.

Si necesita devolver true o false , necesita una expresión regular para la validación que tenga las siguientes propiedades:

  • La expresión regular de validación coincide con toda la cadena
  • La expresión regular de validación no tiene un indicador g (si se usa con RegExp#test , puede causar efectos secundarios no deseados y agrega confusión (consulte ¿Por qué un RegExp con indicador global da resultados incorrectos? )).

Entonces, en su caso, use el enfoque de dos pasos:

  • Valide la cadena con /^\s*(?:(?:\w+|"[^"]*")\s*)*$/.test(text) primero y luego
  • Si hay una coincidencia, extraiga las coincidencias usando su código, o uno un poco más mejorado, const matches = text.match(/\w+|"[^"]*"/g) .

Vea la demostración de JavaScript:

 var extraction_re = /\w+|"[^"]*"/g; var validation_re = /^\s*(?:(?:\w+|"[^"]*")\s*)*$/; for (var text of ['hey "a"b', 'hey ??? "a"b']) { if (validation_re.test(text)) { console.log("Matched:", text.match(extraction_re)) } else { console.log(text, "=> No Match!") } }

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!