2016-04-14 2 views
0

немного нуба в регулярное выражениеJavascript RegExp - это включает в себя пространство и скобки вокруг

Пожалуйста, проверьте my attempt.

Я хочу, чтобы выделить числа, которые не имеют дефис или другие символы вокруг них, кроме скобок - и затем поместить кавычки вокруг этих цифр

до сих пор у меня есть - [^a-z-0-9](\d+)[^0-9-a-z]

матч группы цифр - это не может начинаться или заканчиваться числами или charachters

в настоящее время соответствие (1, 2) вместо того, чтобы сказать, 1 и 2

Тест

(0-hyphen-number) OR 
(123 no hyphen) OR 
(no hyphen 2) OR 
(no 3 hyphen) OR 
(no -4- hyphen) OR 
(no -5 hyphen) OR 
(no 6- hyphen) OR 
(blah 0987 hyp1hen) OR 
(blah -4321 hyp-2hen) OR 
(blah -1234- hyp3-hen) 

Ожидаемое Ouput :)

(0-hyphen-number) OR 
("123" no hyphen) OR 
(no hyphen "2") OR 
(no "3" hyphen) OR 
(no -4- hycphen) OR 
(no -5 hyphden) OR 
(no 6- hyphen) OR 
(blah "0987" hyp1hen) OR 
(blah -4321 hyp-2hen) OR 
(blah -1234- hyp3-hen) 
+1

Что ожидается выход именно? – Shafizadeh

+0

В чем проблема? Регулярное выражение похоже на то, что вы хотите. – sln

+1

Помните, что в JS нет никаких утверждений lookbehind. Таким образом, группа захвата и текущее регулярное выражение должны быть все, что вам нужно. – sln

ответ

1

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

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

Regex:([^a-z0-9-])(\d+)([^0-9a-z-])

Замена сделать: Заменить $1"$2"$3

Regex101 Demo

+1

Огромное спасибо - да, у меня был сбежавший гипн, прежде чем :) просто приложив и используя $ 1 - $ 3 работал –

+0

Ahh есть еще одна проблема с этим - он пропускает последовательные номера - https://regex101.com/r/pO4mO1/2 –

0

К тому времени, когда я загружен Regex101, он уже имел это рабочее регулярное выражение: [^a-z-0-9](\d+)[^0-9-a-z]

FYI (для всех запутанного), в более ранних ревизиях должности, регулярное выражение было ^a-z-0-9[^0-9-a-z]. Другой пользователь отредактировал сообщение, чтобы отразить то, что они видели в демо.

1

do not have hyphen or other characters around them apart from brackets

Вы должны принять к сведению, что ваш оригинальный регулярное выражение [^a-z-0-9](\d+)[^0-9-a-z]
соответствует любым пунктуациям вокруг цифр.

Таким образом, ,888+ и ,888] или *888} будут соответствовать.

Но что вы, вероятно, ищете что-то вроде этого

(?:^|[\s()])(\d+)(?:[\s()]|$)

, который позволяет только пробельные границы или границы parenth в.

Изменить [\s()][\s(] или [\s}] чтобы удовлетворить ваши потребности.


Модификация: Чтобы получить, возможно, пробельные отделенные номера.
https://regex101.com/r/pO4mO1/3

(?:^|[\s()])(\d+(?:\s*\d)*)(?:[\s()]|$)

Expanded

(?: 
    ^
    | [\s()] 
) 
(       # (1 start) 
     \d+ 
     (?: \s* \d)* 
)        # (1 end) 
(?: 
     [\s()] 
    | $ 
) 
+0

другая проблема с этим - это пропуск последовательных номеров https://regex101.com/r/pO4mO1/2 –

+0

@IanWarner - добавлено обновление. – sln

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