2016-02-24 5 views
0

После того, как вы пришли к шокирующей реализации того, что регулярные выражения в JavaScript несколько отличаются от обычных в PCE, я застрял в следующем.JavaScript regex получает номер после строки

В PHP I extract a numberпосле х:

(?x)[0-9]+ 

В JavaScript то же регулярное выражение не работает, из-за недопустимыми группами в результате разности отлова скобки.

Так что я пытаюсь достичь того же тривиальное функциональность, but I keep getting как х и номер:

(?:x)([0-9]+) 

Как определить число после х без включения х?

+0

Это должно работать (?! X) ([0-9] +). – gothical

+0

@gothical да it! –

ответ

3

Это тоже работает:

/(?:x)([0-9]+)/.test('YOUR_STRING');

Затем значение вы хотите:

RegExp.$1 // group 1

+2

да, это то, на что я надеялся: 'var x = str.match (/ (?: x) (\ d +)/', чтобы соответствовать правильной части, а затем доступ к ней с помощью' x [1] '. Я уверен, что должен быть более элегантный способ? –

+0

A более элегантный способ? Чувак, я нахожу это красивым!: D – Jodevan

+0

Серьезно теперь, как я написал это очень распространенный способ использования регулярных выражений в Javascript. – Jodevan

1

Вы можете попробовать следующее регулярное выражение: (?!x)[0-9]+

скрипку здесь: https://jsfiddle.net/xy6x938e/1/

Это предполагает, что вы сейчас ищете х с последующим числом, он использует захват группы, чтобы захватить только цифры раздел.

var myString = "x12345"; 
var myRegexp = /x([0-9]+)/g; 
var match = myRegexp.exec(myString); 
var myString2 = "z12345"; 
var match2 = myRegexp.exec(myString2); 

if(match != null && match.length > 1){ 
    alert('match1:' + match[1]); 
} 
else{ 
    alert('no match 1'); 
} 
if(match2 != null && match2.length > 1){ 
    alert('match2:' + match2[1]); 
} 
else{ 
    alert('no match 2'); 
} 
+1

на самом деле это неверно, оно будет соответствовать любому числу, игнорируя его x, y или z –

+0

обновленный скрипт https://jsfiddle.net/xy6x938e/1/ – jimplode

-1

Вы можете использовать эксклюзивный шаблон (?!...)

Так, для примера, это будет /(?!x)[0-9]+/. Попробуйте выполнить следующие действия:

/(?!x)\d+/.exec('x123') 
// => ["123"] 
+0

проблема с этим регулярным выражением (как прокомментировано в jimplode '), состоит в том, что он соответствует * любому * числу, следующему символу, независимо от того, является ли ключ 'x',' y' или 'z'. Посмотрите сами: https://regex101.com/r/oP2eR3/1 –

Смежные вопросы