solo - validar caracteres especiales javascript
expresión regular para que coincida exactamente con 5 dígitos (5)
Estoy leyendo un archivo de texto y quiero usar la expresión regular a continuación para extraer números con exactamente 5 dígitos, ignorando alfabetos.
Prueba esto...
var str = ''f 34 545 323 12345 54321 123456'',
matches = str.match(//b/d{5}/b/g);
console.log(matches); // ["12345", "54321"]
jsFiddle .
La palabra límite /b
es tu amiga aquí.
Actualizar
Mi expresión regular obtendrá un número como este 12345
, pero no como a12345
. Las otras respuestas proporcionan grandes expresiones regulares si necesita este último.
testing= testing.match(/(/d{5})/g);
Estoy leyendo un html completo en variable. Desde la variable, desea tomar todos los números con el patrón de exactamente 5 dígitos. No es necesario preocuparse de si antes / después de este dígito tiene otro tipo de palabras. Solo quiero asegurarnos de que sea lo que sea, se tomaron números de 5 dígitos.
Sin embargo, cuando lo aplico, no solo extrae el número con exactamente 5 dígitos, sino también el número con más de 5 dígitos recuperados ...
Intenté poner ^
por delante y $
detrás, pero haciendo que el resultado saliera como nulo.
No es necesario preocuparse de si antes / después de este dígito tiene otro tipo de palabras
Para hacer coincidir el patrón del número de 5 dígitos en cualquier lugar de la cadena, sin importar si está separado por espacios o no, use esta expresión regular (?<!/d)/d{5}(?!/d)
.
Códigos de JavaScript de muestra:
var regexp = new RegExp(/(?<!/d)/d{5}(?!/d)/g);
var matches = yourstring.match(regexp);
if (matches && matches.length > 0) {
for (var i = 0, len = matches.length; i < len; i++) {
// ... ydo something with matches[i] ...
}
}
Aquí hay algunos resultados rápidos.
abc12345xyz (✓)
12345abcd (✓)
abcd12345 (✓)
0000aaaa2 (✖)
a1234a5 (✖)
12345 (✓)
<space>
12345<space>
12345 (✓✓)
Esto debería funcionar:
<script type="text/javascript">
var testing=''this is d23553 test 32533/n31203 not 333'';
var r = new RegExp(/(?:^|[^/d])(/d{5})(?:$|[^/d])/mg);
var matches = [];
while ((match = r.exec(testing))) matches.push(match[1]);
alert(''Found: ''+matches.join('', ''));
</script>
Mi cadena de prueba para lo siguiente:
testing=''12345,abc,123,54321,ab15234,123456,52341'';
Si entiendo su pregunta, querría ["12345", "54321", "15234", "52341"]
.
Si los motores JS admitieran la expresión regular de expresiones regulares, usted podría hacer:
testing.match(/(?<^|/D)/d{5}(?=/D|$)/g)
Como no lo hace actualmente, podría:
testing.match(/(?:^|/D)(/d{5})(?=/D|$)/g)
y elimine el no-dígito inicial de los resultados apropiados, o:
pentadigit=/(?:^|/D)(/d{5})(?=/D|$)/g;
result = [];
while (( match = pentadigit.exec(testing) )) {
result.push(match[1]);
}
Tenga en cuenta que para IE, parece que necesita usar un RegExp almacenado en una variable en lugar de una expresión regular literal en el bucle while, de lo contrario obtendrá un bucle infinito.
de que se trata esto /D(/d{5})/D
Esto hará en
f 23 23453 234 2344 2534 hallo33333 "50000"
23453, 33333 50000