Hola
Quizás así:
Código PHP:
<script type="text/javascript">
// Funciona
var p = /(^|s)palabra(s|$)/;
// No funciona
var p2 = new RegExp("(^|\\s)palabra(\\s|$)");
var palabra = "palabra ";
var t1 = p.test(palabra);
var t2 = p2.test(palabra);
document.write(t1+", "+t2);
</script>
Recuerda que lo que le pasas a
RegExp() es un string, y que si hacemos un alert() de "hola que \stal" nos dirá: ""hola que stal", es decir, nos pasará por alto la contrabarra porque ésta significa que estamos escapando la
s. Para escapar la contrabarra, necesitamos escapar la contrabarra (con otra contrabarra):
alert("hola que \\stal"); ==> "hola que \stal"
Con un
alert(pattern2) habrías visto el fallo enseguida.
En
esta página -un poquito rarita, todo hay que decirlo- hay un apartado llamado
TURNING IMPLICIT INTO EXPLICIT que comenta más ampliamente eso del escapado.
Un saludo.