2017-02-06 2 views
1

У меня есть следующее regexp, которое должно обнаруживать последовательные цифры, такие как «123456» или «654321» в C#, но cannnot преобразовать его в соответствующую строку regexp javascript.Соответствующее регулярное выражение в Javascript

string re = @"(?x) 
     ^
     # fail if... 
     (?! 
      # sequential ascending 
      (?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){5} \d $ 
      | 
      # sequential descending 
      (?:1(?=0)|2(?=1)|3(?=2)|4(?=3)|5(?=4)|6(?=5)|7(?=6)|8(?=7)|9(?=8)){5} \d $ 
     ) 
    "; 

Я пробовал следующий Javascript, но это, кажется, всегда возвращает истину:

var re = new RegExp("^(?!(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){5} \d $|(?:1(?=0)|2(?=1)|3(?=2)|4(?=3)|5(?=4)|6(?=5)|7(?=6)|8(?=7)|9(?=8)){5} \d $)"); 
var isMatch = re.test(str); 
+0

Как я уже говорил, удалите все пробела. https://regex101.com/r/kNHkMn/2 –

+0

@ WiktorStribiżew Я сделал, но он по-прежнему проверяет истину как для «123456», так и «135468». –

+0

'123456' не соответствует, и' 135468' выглядит действительным в соответствии с регулярным выражением. Те же результаты получены по адресу http://regexstorm.net/tester –

ответ

1

Поскольку движок регулярных выражений JavaScript не поддерживает FREESPACE режим (многословный) регулярных выражений (включен с модификатором (?x) инлайн) вас необходимо удалить все пробелы форматирования из шаблона.

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

var re = /^(?!(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){5}\d$|(?:1(?=0)|2(?=1)|3(?=2)|4(?=3)|5(?=4)|6(?=5)|7(?=6)|8(?=7)|9(?=8)){5}\d$)/; 
Смежные вопросы