Expresión regular [Any number]

3 minutos de lectura

avatar de usuario
ShaneKm

Necesito probar para “[any number]” en una cadena en javascript. ¿Cómo lo emparejaría?

Vaya, “[” and “]”También deben coincidir.

así que cadena como “[1]” o “[12345]” es un partido.

No coincide: “[23432” or “1]”

Así por ejemplo:

$('.form .section .parent').find('input.text').each(function(index){
      $(this).attr("name", $(this).attr("name").replace("[current]", "['"+index+"']"));
});

Necesito reemplazar el nombre de los campos de entrada: “elementos[0].firstname” a “elementos[1].nombre” gracias

  • stackoverflow.com/questions/18082/…

    – mdrg

    8 de febrero de 2011 a las 10:28

avatar de usuario
aorcsik

ACTUALIZAR: para su pregunta actualizada

variable.match(/\[[0-9]+\]/);

Prueba esto:

variable.match(/[0-9]+/);    // for unsigned integers
variable.match(/[-0-9]+/);   // for signed integers
variable.match(/[-.0-9]+/);  // for signed float numbers

¡Espero que esto ayude!

  • Probé esto $(this).attr(“nombre”, $(this).attr(“name”).replace(“/\[[0-9]+\]/”, “[‘”+index+”‘]”)); pero no funciona. ¿Estoy haciendo algo mal?

    – ShaneKm

    8 de febrero de 2011 a las 10:55

  • no importa. funciona: var nombre = $(esto).attr(“nombre”); var newname = $(this).attr(“name”).replace(name.match(/\[[0-9]+\]/), “[“+index+”]”);

    – ShaneKm

    8 de febrero de 2011 a las 11:04


  • @aorcsik Salvavidas 🙂

    – Bimal Das

    28 de marzo de 2017 a las 9:01

  • /[-.0-9]+/ coincide solo con un punto, que en realidad no coincide con un número.

    – Ryan Shillington

    23 de enero de 2020 a las 0:00

if("123".search(/^\d+$/) >= 0){
   // its a number
}

Siempre uso la siguiente expresión regular para detectar cualquier tipo de número en una cadena. No tuve problemas hasta ahora.

'(([\+\-]*\d*\.*\d+[eE])?([\+\-]*\d*\.*\d+))'

En detalle:

'([\+\-]*\d*\.*\d+)'

para hacer coincidir un número (no) decimal con (fuera) los dígitos iniciales o el signo

'([\+\-]*\d*\.*\d+[eE])?'

para hacer coincidir una base exponencial antes del número.

Si se requieren corchetes alrededor, puede agregarlos dentro o fuera del paréntesis circundante:

'(\[([\+\-]*\d*\.*\d+[eE])?([\+\-]*\d*\.*\d+)\])'

De hecho los paréntesis circundantes no son necesarios, pero los mantengo para concatenar más fácilmente la expresión con otras.

var mask = /^\d+$/;
if ( myString.exec(mask) ){
   /* That's a number */
}

Puedes usar la siguiente función para encontrar el mayor [number] en cualquier cadena.

Devuelve el valor del mayor. [number] como un entero.

var biggestNumber = function(str) {
    var pattern = /\[([0-9]+)\]/g, match, biggest = 0;

    while ((match = pattern.exec(str)) !== null) {
        if (match.index === pattern.lastIndex) {
            pattern.lastIndex++;
        }
        match[1] = parseInt(match[1]);
        if(biggest < match[1]) {
            biggest = match[1];
        }
    }
    return biggest;
}

MANIFESTACIÓN

La siguiente demostración calcula el número más grande en su área de texto cada vez que hace clic en el botón.

Le permite jugar con el área de texto y volver a probar la función con un texto diferente.

var biggestNumber = function(str) {
    var pattern = /\[([0-9]+)\]/g, match, biggest = 0;

    while ((match = pattern.exec(str)) !== null) {
        if (match.index === pattern.lastIndex) {
            pattern.lastIndex++;
        }
        match[1] = parseInt(match[1]);
        if(biggest < match[1]) {
            biggest = match[1];
        }
    }
    return biggest;
}

document.getElementById("myButton").addEventListener("click", function() {
    alert(biggestNumber(document.getElementById("myTextArea").value));
});
<div>
    <textarea rows="6" cols="50" id="myTextArea">
this is a test [1] also this [2] is a test
and again [18] this is a test. 
items[14].items[29].firstname too is a test!
items[4].firstname too is a test!
    </textarea>
</div>

<div>
   <button id="myButton">Try me</button>
</div>

Ver también este violín!

¿Ha sido útil esta solución?