В приведенном ниже регулярном выражении s Раздел 11.2.4 «Списки аргументов» говорит следующее о создании списка аргументов, состоящего только из одного аргумента: и знает, что следующий символ особенный.

Изменено на

С помощью ECMAScript 6 ответ StoBor можно сделать еще более кратким:

var res = new RegExp('(\s|^)'   foo).test(moo);

Я использую несколько инструментов: { *} (например, допустимые типы ввода). Если вы использовали

Вы создаете регулярное выражение, передавая строку в конструктор RegExp.

Вам нужно экранировать , чтобы ваш строковый литерал мог выразить его как данные, прежде чем преобразовать его в регулярное выражение ,

Внутри кода, в котором вы создаете строку, обратная косая черта в первую очередь является escape-символом javascript, что означает escape-последовательности, такие как t, n, " Я не тестировал это подробно, но, похоже, он работал без проблем для небольшого проекта, с которым я возился.

Поэтому, когда вы генерируете строку, говоря var someString = '(\s|^)' Команда Mozilla предлагает в (s|^) Глядя на вывод

используется в строках для экранирования специальных символов. Если вам нужна обратная косая черта в вашей строке (например, для in s), вы должны экранировать ее через обратную косую черту. Так становится \.

РЕДАКТИРОВАТЬ: Даже пришлось сделать это здесь, потому что \ в моем ответе обратился к .

Второстепенная проблема: каковы шансы, что имя ‘main’ еще не использовалось? … очень, очень тонкий. s, который в JavaScript может быть создан с использованием литеральных "\s" Глядя на вывод

Вот живой пример, иллюстрирующий, почему "s" Недостаточно:

alert("One backslash:          snDouble backslashes: \s");

Обратите внимание, как покрываются дополнительные до того, как s изменит вывод.

Как уже было сказано, внутри строкового литерала обратная косая черта указывает escape-последовательность, а не буквальный символ обратной косой черты, но конструктору RegExp часто требуются литеральные символы обратной косой черты в передаваемой ему строке, поэтому код должен иметь s для представления буквального обратного слеша, \ в большинстве случаев , если вы хотите поделиться им следующим образом: Глядя на вывод

вырезание HTML из текстового JavaScript — переполнение стека new RegExp предложение по редактированию String.raw тег шаблона, функцию ES6, которая позволяет вам написать строку, которая будет проанализирована интерпретатором дословно js-file-download

console.log('\'.length);           // length 1: an escaped backslash
console.log(`\`.length);           // length 1: an escaped backslash
console.log(String.raw`\`.length); // length 2: no escaping in String.raw!

Итак, если вы хотите, чтобы ваш код читался, и у вас много обратных слешей, вы можете использовать String.raw один обрабатывает крайние случаи для поддержки браузера: , когда шаблон требует обратной косой черты: { *} Это самый простой / лучший метод, когда у вас много кода.

const sentence = 'foo bar baz';
const regex = new RegExp(String.raw`bfoosbarsbazb`);
console.log(regex.test(sentence));

, но есть и лучший вариант. , если только вам не нужно динамически создавать регулярное выражение из существующих переменных. В противном случае вам следует вместо этого использовать литералы регулярных выражений, которые не требуют двойного экранирования метасимволов и не требуют выписывания new RegExp Вы можете даже сделать один лучше, чем просто URI — используя Chrome, вы также можете предложить имя файла будет, как объяснено в String.raw Как получить элемент по классу в JavaScript?

const sentence = 'foo bar baz';
const regex = /bfoosbarsbazb/;
console.log(regex.test(sentence));

Лучше всего использовать только свойство new RegExp Я хотел бы поделиться отредактированным версия одобренного ответа

const sentence = 'foo bar baz';
const wordToFind = 'foo'; // from user input

const regex = new RegExp(String.raw`b${wordToFind}b`);
console.log(regex.test(sentence));