2011-12-17 32 views
7

Al parecer, de nuevo en Firefox 3.6, la siguiente era legítima:javascript expresiones regulares como funciones?

/[0-9]{3}/('23 2 34 678 9 09') 

y el resultado fue '678'.

FF8 no tiene ninguna. ¿Cuál es la sintaxis correcta ahora?

+0

¿Cuál fue el resultado? – Michas

+0

Esto realmente depende de lo que quieras hacer ... hay 'test' y' exec', y las cadenas tienen 'match',' split' (y 'search'?). Sugiero: [Documentación RegExp, en MDN] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp). – Kobi

+0

Lo creas o no, las pruebas de unidad interna de HtmlUnit tienen este código, y el resultado deseado es la cadena coincidente, si corresponde. – bmargulies

Respuesta

6

¿Quieres

/[0-9]{3}/.test('23 2 34 678 9 09'); 

o

/[0-9]{3}/.exec('23 2 34 678 9 09'); 
3

No sé por qué se necesita que la sintaxis, pero esto es algo para el lulz:

RegExp = (function(){ 
    var old = RegExp; 
    return function(){ 
     return old.prototype.exec.bind(old.apply(this, arguments)); 
    }; 
})() 

continuación:

new RegExp("[0-9]{3}")('23 2 34 678 9 09') 
//["678"] 

Tenga en cuenta que el constructor hackeado no se invocará al utilizar literales de modo que sólo funciona cuando se utiliza new RegExp; P

Cuestiones relacionadas