Regex не дзейнічае ў JavaScript

Гэта рэгулярны выраз не з'яўляецца дапушчальным ў JavaScript. Ён кажа, што ёсць недапушчальная група. Можа хто-небудзь дапамагчы мне прымусіць яго працаваць?

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

2 адказы

Update: Updating as per suggestions given in comments.

Выкарыстоўвайце адзін з гэтых трох выразаў замест. Гэта ж рэгулярны выраз, проста фіксуючы (? Я) частку і даданне патрабуецца пазбегнуць, каб адпавядаць спецыфікацыі Javascript.

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

Калі вы карыстаецеся новы RegExp , каб пабудаваць свой аб'ект назваў паведамленняў, то вы павінны бегчы ўсе зваротныя слэш. Розніца паміж першым і другім выразам з'яўляецца тое, што другім адзін выкарыстоўвае адзінарныя двукоссі, каб пабудаваць радок рэгулярных выразаў і ёсць апостраф як частка вашага назваў паведамленняў, так што вы павінны пазбегнуць адзінарных двукоссяў, каб прымусіць яе працаваць належным чынам. Трэцяе выраз выкарыстоўвае /шаблон/сцягі сінтаксіс для пабудовы аб'екта рэгулярнага выразы. Як адзначыў Майк ў каментарах, вы павінны бегчы /, калі ён не знаходзіцца ўсярэдзіне набору знакаў. Усе вашыя / s знаходзяцца ўнутры наборы знакаў, таму не абмінуць не патрабуецца.

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

4
дададзена
Вядома. Я проста хачу, каб пераканацца, што OP ведае пра гэта. Калі ён выкарыстоўвае новы RegExp , то ён павінен бегчы `\` знакаў. Я не ўпэўнены ў тым кантэксце, у якім OP выкарыстоўвае яго рэгулярных выразаў.
дададзена аўтар Narendra Yadala, крыніца
@MikeSamuel Дзякуй за інфармацыю, я абнавіў адказ адпаведна.
дададзена аўтар Narendra Yadala, крыніца
<Код>/ не з'яўляецца праблемай, так як ён знаходзіцца ўсярэдзіне групы характараў. <Код>/[/]/ з'яўляецца цалкам рэгулярным выразам літаральным. 15.10.1 вызначае АтомКлассаБезТире :: ИсходныйСимвол, але не адзін з \ або] або - | \ ClassEscape
дададзена аўтар Mike Samuel, крыніца
@ridgerunner. Паспрабуйце гэта. <Код>/[/]/ будзе працаваць у любым буйным інтэрпрэтатарам. Падзельнік для сімвалаў групы ] , а не / таму АтомКлассаБезТире ўключае ] , але ўключае ў сябе /.
дададзена аўтар Mike Samuel, крыніца
Ня маскіраванне прамой слэш не з'яўляецца праблемай для Darthg8r: нешта накшталт новы RegExp ( "а/Ь») цалкам дапушчальна. <Код>/а/б/ не будзе сапраўдным, але Darthg8r не будзе атрымліваць у «недапушчальны групы» паведамленне пра памылку, калі (s) ён рабіў гэта.
дададзена аўтар ruakh, крыніца
Але, +1, таму што ваш код будзе працаваць. :-)
дададзена аўтар ruakh, крыніца
Самуэль - @ Mike няма, / павінны быць экранаваныя ўсюды, нават унутры аднаго класа паўкокс, калі рэгулярны выраз задаецца з дапамогай JavaScript: /рэгулярных выразаў/сцягоў літаральны сінтаксіс рэгулярных выразаў. <Код>/ гэта рэгулярны выраз падзельнік.
дададзена аўтар ridgerunner, крыніца
Samuel @ Mike - Клянуся Юпітэрам, вы маеце рацыю! (<Код>/[/]/ працуе ва ўсіх маіх тэстаў браўзэраў: IE6, FF2 і Opera-11). Дзякуй за выпраўленне. (Даведвайцеся нешта новае кожны дзень!)
дададзена аўтар ridgerunner, крыніца
(?i)

Javascript не падтрымлівае мадыфікатары рэжыму ўнутры рэгулярнага выразы.

3
дададзена