Различные результаты с литералом регулярного выражения и объектом регулярного выражения - PullRequest
1 голос
/ 05 августа 2020

У меня есть одно и то же регулярное выражение, определенное двумя разными способами: один с литералами, а другой как объект, и, что удивительно, оба дают разные результаты, я не могу понять почему?

let s = "The quick fox";

const r1 = new RegExp('\b\w+\b','g');
const r2 = /\b\w+\b/g;

console.log(s.match(r1));
console.log(s.match(r2));

Это вывод для приведенный выше код:

null
[ 'The', 'quick', 'fox' ]

r1 дает значение null, что является неожиданным, тогда как r2 дает ожидаемые результаты. В чем проблема с объектом регулярного выражения, который возвращает значение null?

Ответы [ 3 ]

3 голосов
/ 05 августа 2020

Вам просто нужно экранировать backsla sh в строке.

let s = "The quick fox";

const r1 = new RegExp('\\b\\w+\\b','g');
const r2 = /\b\w+\b/g;

console.log(s.match(r1));
console.log(s.match(r2));
1 голос
/ 05 августа 2020

Вы используете конструктор, который выполняет компиляцию регулярного выражения во время выполнения.

Вы должны использовать / до и после этого вместо '

const r1 = new RegExp (/ \ b \ w + \ b /, 'g');

Эта ссылка быстро все объяснит

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp

1 голос
/ 05 августа 2020

В строке обратная косая черта используется для обозначения специального символа (например, \n - это новая строка). Поэтому, если вы хотите использовать строку для создания регулярного выражения, вам нужно их экранировать.

console.log(`Wrong way to get \w: ${new RegExp('\w')}`);

console.log(`Right way to get \w: ${new RegExp('\\w')}`);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...