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

750
Vistas
¿Cómo limitar el rango de caracteres en la expresión regular?

Digamos,

 let sentence= "Dear user {#val#}{#val#} thanks"

{#val#} es el valor dinámico en la oración anterior. Aquí, en lugar de {#val#}, puede haber cualquier valor, pero puede haber al menos 0 y un máximo de 5 caracteres. Así que estoy sustituyendo el {#val#} como .{0,5} . No necesito considerar espacios excepto la parte {#val#}, por lo que mi expresión regular formada sería,

 let regex = /^Dear\s*user\s*.{0,5}.{0,5} thanks$/i let customermsg = "Dear user 1 2 thanks" //Should be valid let customermsg1 = "Dear user 12345 6789 thanks" //Should be valid let customermsg2 = "Dear user 123 5 6789 thanks" //Should be valid because space can also be considered as a character and for fist .{0,5} => 123 5 and for second .{0,5} => 6789 let customermsg3 = "Dear user 1 thanks" //Should pass let customermsg4 = "Dea r user 1 tha nks" // Should Pass since spaces are not considered in the static portion.

pero cuando trato de probar usando a continuación,

 regex.test(customermsg)

Es todo lo contrario. Incluso he probado lo siguiente,

 let splitters=/{\\#val\\#}|((\\s\*))/gi; sentence = sentence.replace(splitters, (x, y) => y ? y : ".(\\S{0,5})");

Esto devuelve la expresión regular como,

 /^Dear\s*user\s*.(\S{0,5}).(\S{0,5})\s*thanks$/

Pero esto tampoco está funcionando como se esperaba. Estoy atascado en esto. Por favor, ayúdame.

over 4 years ago · Santiago Trujillo
5 Respuestas
Responde la pregunta

0

Lo que necesita es verificar si un número y espacios en blanco están presentes varias veces de acuerdo con

"Estimado usuario 1, gracias" // Debería fallar ya que solo hay un valor

Por lo tanto, su expresión regular está bien, excepto que no verifica si un número y espacios en blanco están presentes más de una vez.

Utilice la siguiente expresión regular

 Dear\s*user\s*([\d]+[\s]+){2,5}\s*thanks$
  • ([\d]+[\s]+){2,5}\s*

    • Captura de dígitos coincidentes de grupo entre cero y un número ilimitado de veces y espacios en blanco entre cero y un número ilimitado de veces, al menos dos veces y un máximo de cinco.

La parte ([\d]+[\s]+){2,5}\s* asegura que un número esté presente al menos dos veces, por lo que un solo número en la cadena Dear user ... thanks fallará.

Puede usar tantos espacios en blanco antes, entre y después de los dígitos como desee.

 let regex = /Dear\s*user\s*([\d]+[\s]+){2,5}\s*thanks$/i let customermsg = "Dear user 1 2 thanks" //Should be valid let customermsg1 = "Dear user 12345 6789 thanks" //Should be valid let customermsg2 = "Dear user 123 5 6789 thanks" //Should be valid because space can also be considered as a character and for fist .{1,5} => 123 5 and for second .{1,5} => 6789 let customermsg3 = "Dear user 1 thanks" //Should fail since only one value is there let customermsg4 = "Dear user 435 4523 thanks" // With many spaces console.log(regex.test(customermsg)); console.log(regex.test(customermsg1)); console.log(regex.test(customermsg2)); console.log(regex.test(customermsg3)); console.log(regex.test(customermsg4));

over 4 years ago · Santiago Trujillo Denunciar

0

https://regex101.com/r/qBFSxq/1

Esta puede ser una forma de resolverlo: ^Dear\s*user(\s*\d)?(?(1)(.{1,5})(?=(\s{1,}))(?<!(\s{2}))(.{1,5}) thanks|\s*thanks)$

Editar: se agregó la construcción de búsqueda anticipada positiva de expresiones regulares ( (.{1,5})(?=(\s{1,})) ), https://www.regular-expressions.info/lookaround.html , además de usar condicionales dentro de expresiones regulares ( (\s*\d)?(?(1)... ) y mirada negativa detrás ( (?<!(\s{2}))(.{1,5}) )

over 4 years ago · Santiago Trujillo Denunciar

0

Puede usar el grupo de captura s para la parte anterior a la coincidencia y comenzar la coincidencia con un único carácter que no sea un espacio en blanco.

Afirme 1-9 caracteres a la derecha seguido de thanks . Si ese es el caso, haga coincidir al menos otro carácter que no sea un espacio en blanco seguido del resto hasta llegar a thanks .

Por ejemplo

 let regex = /^(Dear\s*user\s*)\S(?=.{1,9} thanks$)\s*\S.*(?= thanks$)/i; [ "Dear user 1 2 thanks", "Dear user 12345 6789 thanks", "Dear user 123 5 6789 thanks", "Dear user 1 thanks", "Dear user 1 thanks" ].forEach(s => console.log(s.replace(regex, (m, g1) => g1 + "{#val#}{#val#}")) );

O si puede haber solo dígitos y espacios con un solo grupo de captura

 let regex = /^(Dear\s*user\s*)\d(?=[ \d]*\d)[ \d]{1,9}(?= thanks$)/i; [ "Dear user 1 2 thanks", "Dear user 12345 6789 thanks", "Dear user 123 5 6789 thanks", "Dear user 1 thanks", "Dear user 1 thanks", "Dear user 12345 64789 thanks" ].forEach(s => console.log(s.replace(regex, (m, g1) => g1 + "{#val#}{#val#}")) );

over 4 years ago · Santiago Trujillo Denunciar

0

Según tengo entendido, quieres

  • Ambos valores serán reemplazados por la misma expresión regular
  • Espacios antes del valor para ser ignorados
  • Espacios para ser parte del val

Y también

  • val no puede comenzar con un espacio

El primer punto es el más complicado porque debe asegurarse de que el primer valor no comience con un espacio, mientras que el segundo valor puede seguir siendo la misma expresión regular. Esencialmente, tiene dos requisitos diferentes aquí.

La única solución que se me ocurre es hacer una búsqueda anticipada para asegurarme de que el siguiente carácter después de los espacios opcionales después del usuario sea un carácter que no sea un espacio.

 /^Dear\s*user\s*(?=\S)(.{1,5}.{1,5}) thanks$/

https://regex101.com/r/AtUxDS/2

over 4 years ago · Santiago Trujillo Denunciar

0

No estoy seguro de haber entendido completamente sus requisitos, pero si desea permitir espacios en blanco entre cualquiera de las letras, puede hacer algo como esto:

^\s*D\s*e\s*a\s*r\s*u\s*s\s*e\s*r\s*(?:.\s*){0,5}\s*(?:.\s*){0,5}\s*t\s*h\s*a\s*n\s*k\s*s\s*$

Explicación: \s* se coloca antes y después de cada letra para permitir espacios en blanco. Para los rangos de caracteres, (?:.\s*){0,5} se usa para permitir espacios en blanco después de cada carácter contado. (El ?: al principio lo excluye como grupo de captura).

Demostración: https://regex101.com/r/2ZAqui/1

over 4 years ago · Santiago Trujillo 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