JavaScript и регулярные выражения: буквенный синтаксис Vs. Объект RegExp

У меня есть некоторые проблемы с этим маленьким кодом JavaScript:

var text="Z Test Yeah ! Z";

// With literal syntax, it returns true: good!
alert(/(Z[\s\S]*?Z)/g.test(text));

// But not with the RegExp object O_o
var reg=new RegExp('Z[\s\S]*?Z','g');
alert(reg.test(text));

Я не понимаю, почему буквальный синтаксис и объект RegExp не дают мне того же результата... Проблема в том, что я должен использовать объект RegExp, так как позже у меня будут некоторые переменные.

Любые идеи?

Заранее спасибо:)

Ответы

Ответ 1

Вам нужно удвоить escape \ символов в строковых литералах, поэтому литерал регулярного выражения обычно предпочтительнее.

Try:

'Z[\\s\\S]*?Z'

Ответ 2

Я думаю, это потому, что вам нужно избегать обратной косой черты, даже при использовании одинарных кавычек. Попробуйте следующее:

new RegExp('Z[\\s\\S]*?Z','g')