2015-08-19 2 views
1

Я действительно близок, но просто не могу понять, что произошло. Я пытаюсь заставить его соответствовать только цифрам без дефиса.Регулярное выражение для соответствия только числам после последней тире

Для примера ниже показывает нужный матч в скобках:

one (no match) 
one-1 (1) 
one-two (no match) 
one-two-2 (2) 
one-two-23 (23) 
one-two-23456 (23456) 
one-two-three (no match) 
one-two-three-1 (1) 
one-two-three-23 (23) 
one-0-two-three-2343 (2343) 
one-0-44-2343233 (2343233) 
one-0-two-three-234and324 (no match) 

Я пробовал пару моделей до сих пор, и вот результаты.

Это близко, но спички включают дефис.

-\d+$ 

Я тоже пробовал это, что исправляет проблему с дефисом, но только соответствует двум или более цифрам после дефиса. Например, он не будет соответствовать «1» в «один-1», но он будет соответствовать «12» в «один-12».

[^-]\d+$ 

Я хотел бы отметить, что я использую метод javascript string replace().

ответ

2

В PCRE языках, которые поддерживают просмотр назад, вы можете просто сделать положительный: 'назад

(?<=-)\d+$ 

Пример: https://regex101.com/r/dW6wP3/1

Но так как вы используете Javascript (который не поддерживает просмотр назад), вам можно использовать группы захвата, чтобы захватить то, что вам нужно вместо этого:

(?:-)(\d+)$ 

Пример: https://regex101.com/r/zP1cO6/1

Вы бы использовать его как это:

var text = "one-two-23"; 
console.log(text.match(/(?:-)(\d+)$/)[1]); // 23 

Edit: Так как вы пытаетесь заменить, который изменяет вещи. Вам нужно будет сделать:

var text = "one-two-23"; 
if (/-\d+$/.test(text)) { 
    console.log(text.replace(/\d+$/, '')); 
} 
+0

Я обновил свой вопрос, давая вам знать, что я использую javascript, поэтому первое предложение здесь не будет работать. Второй, по-видимому, также соответствует дефисам. – Rick

+0

Он будет соответствовать дефисам, но, используя группы захвата, вы можете получить то, что вам нужно, используя группы соответствия. – brandonscript

+0

Я пытаюсь заменить только цифры так, чтобы «one-1'.replace (/ (?: -) (\ d +) $ /, '') равнялось бы« one- ». Если я использую группу захвата 'one-1'.replace (/ (?: -) (\ d +) $ /,' $ 1 '), дает мне «one1». Я использую его неправильно? – Rick

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