Зіставлення прямої риски з регулярним виразом


91

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

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

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

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


1
Будь ласка, змініть назву. І що ви насправді намагаєтесь зробити? Я все ще не уявляю, прочитавши ваше запитання.
OptimusCrime

Я не впевнений, що розумію.
Джон Стріклер,

Відповіді:


123

Ви можете врятуватися так.

/\//ig; //  Matches /

або просто використовуйте indexOf

if(str.indexOf("/") > -1)

Дякую, Бен, я теж спробував це, але наприкінці додав ще \.
iBrazilian2


6

Якщо ви хочете використовувати, /вам потрібно втекти з нього за допомогою\

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

6

У регулярних виразах "/" - це спеціальний символ, який потрібно уникати (AKA позначений, розміщуючи \ перед ним, тим самим заперечуючи будь-яку спеціалізовану функцію, яку він може виконувати).

Ось що вам потрібно:

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 на один символ довшим, але це варто для читабельності: /[/]/візуально диференціює кінцевий роздільник чіткіше, ніж /\//.
Дем Пілафіян,

2
/[/]/читається легше і працює, але, на жаль, деякі валідатори RegEx повідомляють "Необхідний роздільник потрібно уникнути зворотною косою рисою" навіть у межах групи символів . Отже, я повернувся до потворної /\//форми.
Дем Пілафіян


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

1
Думаю, це було випадково, вибачте. Я намагався скасувати це, але там сказано, що мій голос заблокований, якщо відповідь не відредаговано. Єдине, що я бачу, це те, що у вас є журнал захоплення груп, якими ви, здається, не користуєтесь. Будь-яка причина, чому все в дужках?
Райан Квінн,

1
@RyanQuinn Дякую за пояснення. Я використовував дужки, щоб групувати речі разом, щоб представити певну цифру, яку я очікував. Здавалося, вони вимагають від них на сайті, який я використовував для тестування: regexr.com Я відредагував свою публікацію (просто додав пробіл в кінці), тож ви зможете видалити голос проти, якщо хочете.
vapcguy

0

Я зіткнувся з двома проблемами, пов’язаними з вищезазначеним, під час вилучення тексту, розділеного \і /, і знайшов рішення, яке відповідає обом, крім використання new RegExp, яке потрібно \\\\на початку. Ці висновки містяться в Chrome та IE11.

Регулярний вираз

/\\(.*)\//g

не працює. Я думаю, що //інтерпретується як початок коментаря, незважаючи на символ втечі. Регулярний вираз (однаково справедливий у моєму випадку, хоча не в цілому)

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

також не працює. Я думаю, що другий /закінчує регулярний вираз, незважаючи на символ втечі.

Що працює для мене, це представляти /як \x2F, що є шістнадцятковим поданням /. Я думаю, що це ефективніше та зрозуміліше, ніж використання new RegExp, але, звичайно, потрібен коментар для ідентифікації шістнадцяткового коду.


0

Вперед коса риса є спеціальним символом, тому вам потрібно додати зворотну косу риску перед косою рискою, щоб вона спрацювала

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

де / представляє пошук / Таким чином ви

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.