Как я могу построить регулярное выражение, чтобы соответствовать значение? - PullRequest
0 голосов
/ 18 апреля 2011

Мне нужно регулярное выражение, соответствующее этому виду строк:

brand-new-car
brand-new-car-1
brand-new-car-100
307

, и мне просто нужно поймать "имя" независимо от того, имеет ли строка -count;как это:

brand-new-car
brand-new-car
brand-new-car
307

Это регулярное выражение не работает должным образом.Его $1 - полная строка, не без -count.

(\S+)(?:-\d+|)$

Ответы [ 4 ]

6 голосов
/ 19 апреля 2011

Вам нужно сделать первую группу захвата "ленивой" или не жадной.

var re = new RegExp("^(\\S+?)(?:-\\d+)?$");

var testStrings = [
    "brand-new-car",
    "brand-new-car-1",
    "brand-new-car-100",
    "307"
];

for (var i=0; i<testStrings.length; i++) {
    var result = re.exec(testStrings[i]);
    say("result: " + result);
}

Результаты:

result: brand-new-car,brand-new-car
result: brand-new-car-1,brand-new-car
result: brand-new-car-100,brand-new-car
result: 307,307
1 голос
/ 19 апреля 2011

Попробуйте это (? Xms) (^ [\ w -] +. *?) (? = [\ W -] + | \ Z) Здесь ниже изображение regex buddy enter image description here

где вы можете поймать «имя» независимо от того, имеет ли строка -count, желтый и синий передний план выделяет различные варианты.

1 голос
/ 19 апреля 2011

Я нашел txt2re.com очень полезным для создания регулярных выражений и изучения того, как их создавать в будущем.Попробуйте.

0 голосов
/ 19 апреля 2011

Просто удалите трубу '|', тогда она заработает

(\S+)(?:-\d+)$

Проверено здесь Рубулярное

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...