Regex недійсний в JavaScript

Цей регулярний вираз недійсний в JavaScript. Це говорить про недійсну групу. Чи може хто-небудь допомогти мені зробити це роботу?

(?i)^(?![\. -])(?!.*[\. -]$)[\w!$%'*+/=?^`{|\.}~ -]{1,64}$
3

2 Відповіді

Update: Updating as per suggestions given in comments.

Замість цього використовуйте одне з цих трьох виразів. Це той самий регулярний вираз, який просто фіксує частину (? I) і додає необхідний вибій, щоб відповідати специфікаціям Javascript.

var regex = new RegExp("^(?![\\. -])(?!.*[\\. -]$)[\\w!$%'*+/=?^`{|\\.}~ -]{1,64}$", "i");
var regex = new RegExp('^(?![\\. -])(?!.*[\\. -]$)[\\w!$%\'*+/=?^`{|\\.}~ -]{1,64}$', "i");
var regex =  /^(?![\. -])(?!.*[\. -]$)[\w!$%'*+/=?^`{|\.}~ -]{1,64}$/i;

Якщо ви використовуєте new RegExp для побудови об'єкта регулярного виразу, то ви повинні уникнути всіх зворотних слїд. Різниця між першим і другим вираженням полягає в тому, що другий використовує одиночні лапки для побудови рядка регулярного виразу, і в рамках регулярного виразу існує одна цитата, тому вам слід уникати єдиної цитати, щоб вона працювала належним чином. Третій вираз використовує синтаксис /pattern/flags для побудови об'єкта regex. Як зазначив Майк у коментарях, вам слід уникнути /, якщо він не знаходиться всередині набору символів. Всі ваші / s знаходяться всередині наборів символів, тому ніякого викрадання не потрібно.

Check out more on JavaScript regex syntax here https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp

4
додано
Впевнений Я просто хочу переконатися, що О.П. знає про це. Якщо він використовує new RegExp , то він повинен вийти з символів `\`. Я не впевнений в контексті, в якому ОП використовує його регулярний вираз.
додано Автор Narendra Yadala, джерело
@MikeSamuel Дякуємо за інформацію, я оновлю відповідь відповідь.
додано Автор Narendra Yadala, джерело
/ не є проблемою, оскільки вона знаходиться всередині групи символів. /[/]/ - це цілком правильний літераральний вираз. 15.10.1 визначає ClassAtomNoDash :: SourceCharacter, але не один з \ або] або - | \ ClassEscape
додано Автор Mike Samuel, джерело
@ridgerunner. Спробуй це. /[/]/ буде працювати в будь-якому основному інтерпретаторі. Розділювач для групи символів - ] , а не /, тому ClassAtomNoDash виключає ] , але включає /.
додано Автор Mike Samuel, джерело
Неперевершена коса риска не є проблемою для Darthg8r: щось подібне до new RegExp ('a/b') цілком справедливо. /a/b/ не буде дійсним, але Darthg8r не потрапить до повідомлення про помилку "Недійсна група", якщо він це зробив.
додано Автор ruakh, джерело
Але +1, тому що ваш код буде працювати. :-)
додано Автор ruakh, джерело
@Mike Samuel - Ні, / має бути вичерпано скрізь, навіть у класі char, коли регулярний вираз вказано за допомогою синтаксису літературного регулярного виразу JavaScript: /regex/flags . / - це розділювач регулярних виразів.
додано Автор ridgerunner, джерело
@ Мік Самуїл - Джоб ти правий! (/[/]/ працює у всіх моїх тестових браузерах: IE6, FF2 та Opera-11). Дякую за корекцію. (Дізнайтеся щось нове кожен день!)
додано Автор ridgerunner, джерело
(?i)

Javascript не підтримує модифікатори режиму всередині регулярного виразу.

3
додано
ІТ КПІ - JavaScript
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram