Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

748
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda