2010-08-05 20 views
5

Digamos que tengo estas dos cadenas: "5/15/1983" y "1983.05.15". Suponga que todos los caracteres en la cadena serán numéricos, excepto un carácter "separador" que puede aparecer en cualquier parte de la cadena. Solo habrá un carácter separador; todas las instancias de cualquier carácter no numérico dado en la cadena serán idénticas.JavaScript regex: encuentre el carácter no numérico

¿Cómo puedo usar la expresión regular para extraer este carácter? ¿Hay una manera más eficiente que la siguiente?

"05-15-1983".replace(/\d/g, "")[0]; 

Gracias!

Respuesta

13
"05-15-1983".match(/\D/) 

Técnicamente, esto devuelve una matriz que contiene una cadena, pero implícitamente se convertirán a la cadena de la mayoría de los lugares que necesita esto.

+0

Así que si sólo estamos buscando el carácter, utilizando el código de arriba, debería ser: "15-05-1983" .match (/ \ D /) [0] [0] ¿entonces? ¿Es esto mejor que mi ejemplo? ¿Por qué? – JamesBrownIsDead

+0

@James, como ya he dicho, lo anterior es una matriz, pero implícitamente convertible, por lo que probablemente no necesite el '[0]'. Además, '" 15-05-1983 ".match (/ \ D /) [0]' y '" 15-05-1983 ".match (/ \ D /) [0] [0]' son * exactamente * equivalente. No hay ningún tipo de caracteres, por lo que indexar devuelve una cadena. De hecho, puede agregar tantos '[0]' como desee. Creo que esta respuesta es mejor, ya que su ejemplo obliga al evaluador a mirar cada letra y hacer una concatenación (trivial). Mi respuesta se detendrá después de encontrar el primer no dígito. –

0

Claramente cansado o sin prestar atención a mi respuesta anterior. Lo siento por eso. Lo que debe he escrito era:

var regexp = new RegExp("([^0-9])","g"); 
var separator = regexp.exec("1985-10-20")[1]; 

Por supuesto, las obras de Matthew Flaschen igual de bien. Solo quería corregir el mío.

+0

'exec' es una función en RegExp, no en cadena, y la matriz devuelta tiene longitud 1, por lo que 1 no es un índice válido. –

+0

Estoy claramente cansado. Me equivoqué mucho con esa sintaxis. – eldarerathis

+0

Y al igual que el código de Matthew, el suyo no necesita el indicador '" g "por la misma razón que él indicó (en los comentarios). – slebetman

1

Aunque no pude entender exactamente lo que intenta hacer intenté extraer los números solo en una cadena y el separador en la siguiente cadena.

he utilizado la anterior:

<script> 
var myStr1 = "1981-01-05"; 
var myStr2 = "1981-01-05"; 
var RegEx1 = /[0-9]/g; 
var RegEx2 = /[^0-9]/g; 
var RegEx3 = /[^0-9]/; 
document.write('First : ' + myStr1.match(RegEx1) + '<br />'); 
document.write('tooo : ' + myStr2.replace(RegEx2, "") + '<br />'); 
document.write('Second : ' + myStr1.match(RegEx2) + '<br />' ); 
document.write('Third : ' + myStr1.match(RegEx3) + '<br />' ); 
</script> 

Salida:

First : 1,9,8,1,0,1,0,5 
tooo : 19810105 
Second : -,- 
Third : - 

espero que obtenga su respuesta

Cuestiones relacionadas