Сопоставление косой черты с регулярным выражением

90

У меня нет большого опыта работы с JavaScript, но я пытаюсь создать систему тегов, которая будет использовать вместо @или .#/

var start = /#/ig; // @ Match

var word = /#(\w+)/ig; //@abc Match

Как я мог использовать /вместо #. Я пробовал делать var slash = '/'и добавлять + slash +, но это не удалось.

iBrazilian2
источник
1
Пожалуйста, измените название. А что вы на самом деле пытаетесь сделать? Я все еще не знаю, прочитав ваш вопрос.
OptimusCrime
Я не уверен, что понимаю.
Джон Стриклер,

Ответы:

123

Вы можете избежать этого вот так.

/\//ig; //  Matches /

или просто используйте indexOf

if(str.indexOf("/") > -1)
Бен МакКормик
источник
Спасибо, Бен, я тоже пробовал, но добавил еще один \ в конце.
iBrazilian2
21

Вам нужно сбежать /с собой \.

/\//ig // matches /
Джехлин
источник
6

Если вы хотите использовать, /вам нужно убежать от него с помощью\

var word = /\/(\w+)/ig;
Епаскарелло
источник
6

В регулярных выражениях «/» - это специальный символ, который необходимо экранировать (он же помечается, помещая перед ним символ \, что исключает любую специализированную функцию, которую он может выполнять).

Вот что вам понадобится:

var word = /\/(\w+)/ig; //   /abc Match

Прочтите специальные символы RegEx здесь: http://www.regular-expressions.info/characters.html

Кирк Х
источник
17
«/» не является специальным символом в регулярных выражениях. Однако это специальный символ в JavaScript, который определяет начало и конец регулярного выражения.
sokkyoku
5

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

const start = /[/]/g;
"/dev/null".match(start)     // => ["/", "/"]

const word = /[/](\w+)/ig;
"/dev/null".match(word)      // => ["/dev", "/null"]
нупаник
источник
2
+1, использование набора символов во избежание экранирования делает RegEx на один символ длиннее, но оно того стоит для удобства чтения: /[/]/визуально различает конечный разделитель более четко, чем /\//.
Dem Pilafian
2
/[/]/его легче читать и он работает, но, к сожалению, некоторые валидаторы RegEx сообщают, что «неэкранированный разделитель должен быть экранирован обратной косой чертой» даже внутри группы символов . Итак, я вернулся к уродливой /\//форме.
Dem
1

Что касается меня, я пытался сопоставить /дату в C #. Я сделал это, просто используя (\/):

string pattern = "([0-9])([0-9])?(\/)([0-9])([0-9])?(\/)(\d{4})";
string text = "Start Date: 4/1/2018";

Match m = Regex.Match(text, pattern);

if (m.Success) 
{ 
    Console.WriteLine(match.Groups[0].Value);  // 4/1/2018
}
else
{
    Console.WriteLine("Not Found!");
}

JavaScript также должен иметь возможность аналогичным образом использовать (\/).

vapcguy
источник
Downvoter, объясните? Это работает, и я доказал это путем тестирования.
vapcguy
1
Я думаю, это был несчастный случай, извините. Я пытался отменить его, но он говорит, что мой голос заблокирован, если ответ не отредактирован. Единственное, что я вижу, это то, что у вас есть журнал захвата групп, которые вы, похоже, не используете. Любая причина, почему все в скобках?
Райан Куинн
1
@RyanQuinn Спасибо за объяснение. Я использовал скобки, чтобы сгруппировать вещи вместе, чтобы представить конкретную цифру, которую я ожидал. Также казалось, что они требовались на сайте, который я использовал для проверки: regexr.com Я отредактировал свой пост (просто добавил пробел в конце), так что вы сможете удалить отрицательный голос, если хотите.
vapcguy
0

Я столкнулся с двумя проблемами, связанными с вышеизложенным, при извлечении текста, разделенного символами \и /, и нашел решение, которое подходит для обоих, кроме использования new RegExp, которое требуется \\\\вначале. Эти результаты есть в Chrome и IE11.

Регулярное выражение

/\\(.*)\//g

не работает. Я думаю, что //интерпретируется как начало комментария, несмотря на escape-символ. Регулярное выражение (одинаково верно в моем случае, но не в целом)

/\b/\\(.*)\/\b/g

тоже не работает. Я думаю, что второе /завершает регулярное выражение, несмотря на escape-символ.

Что действительно работает для меня, так это представление /as \x2F, которое является шестнадцатеричным представлением /. Я думаю, что это более эффективно и понятно, чем использование new RegExp, но, конечно, для определения шестнадцатеричного кода нужен комментарий.

Рональд Дэвис
источник
0

Прямая косая черта - это специальный символ, поэтому вам нужно добавить обратную косую черту перед косой чертой, чтобы она работала

$patterm = "/[0-9]{2}+(?:-|.|\/)+[a-zA-Z]{3}+(?:-|.|\/)+[0-9]{4}/";

где / означает поиск / Таким образом, вы

Джунаид Лодхи
источник