2014-03-20 4 views
2

рассмотрим следующую строку:REGEX для поиска слово, которое не начинается с пространства или закончить с пространством

"abc123 123 123abc abc123abc"

Теперь я хочу, чтобы выбрать 123, что само по себе не. Так что все цифры, но цифры \s\d+\s+

Я попытался кучу вещей, но нет ..

+0

Как бы вы выбрали его? – fzzle

ответ

3

Следующая регулярное выражение будет работать в конкретном случае:

/\w+123\w+|\w+123|123\w+/ 

Как и в:

"abc123 123 123abc abc123abc".match(/\w+123\w+|\w+123|123\w+/g); 

Вывод:

["abc123", "123abc", "abc123abc"] 

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

4

Так вот краткое решение вашей проблемы:

\B123|123\B 

Regular expression visualization

Debuggex Demo

\B спички не являющиеся словоразделы. Поэтому до или после 123 необходимо сложить часть слова.

Это будет соответствовать всем 123 без того, кто стоит один.

Edit 1:

Если 123 стенды для последовательности цифр и abc для последовательности букв вы можете попробовать

[a-zA-Z]\d+|\d+[a-zA-Z] 

Regular expression visualization

Debuggex Demo

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

[a-zA-Z](\d+)|(\d+)[a-zA-Z] 
+0

Я имел в виду 123 и abc как фиктивный текст. Числа могли быть любыми и любого размера. –

+0

Не могли бы вы прояснить это. Может ли 123 любого размера, но исправить для одного текста или должен быть список цифр? Если 123 и abc - только манекены, и у меня 123456, значит, 12345 матч? – wumpz

+0

@MuhammadUmer, пожалуйста, проверьте мой ответ. Полагаю, я сделал то, что вы искали. –

1

Мое предложение в вашем случае будет:

[^\s\d]+\d+[^\s\d]*|[^\s\d]*\d+[^\s\d]+ 

Regular expression visualization

Debuggex Demo

Подробное описание:

[^\s\d]+ // Represents one or more non-whitespace and non-digit character 
\d+ // Represents one or more digit (your required sequence) 
[^\s\d]* // Represents zero or more non-whitespace and non-digit characters 
| // Represents logical OR operation 
[^\s\d]* // Zero or more non-WS and non-digit 
\d+ // Your sequence 
[^\s\d]+ // One or more non-WS and non-digit 

ПРИМЕЧАНИЕ: [^\s\d]* записей используются для захвата всей группы в случае abc123abc.

UPD: В текущей версии, из строки abc13 124233 356abc abc12333abc мой регулярное выражение будет соответствовать abc13, 356abc и abc12333abc.

Также был протестирован с Rubular.

+0

вопрос в том, должен ли «123-» соответствовать или нет. «-» также может быть фиктивным текстом. – wumpz

0

Если вы ищете строку цифр в виде отдельного слова, regexp может использовать границы слов. Например:

$ echo "abc123 123 123abc abc123abc" | egrep -o '\<[[:digit:]]+\>' 
123 

Или, возможно, лучше, например:

$ echo "abc123 234 345abc abc456abc" | egrep -o '\<[[:digit:]]+\>' 
234 

Теперь, я не парень JavaScript. Но если, как представляется, @wumpz предлагает, парсер JavaScript regex использует \B вместо \< и \>, тогда регулярное выражение \B[[:digit:]]+\B, похоже, делает трюк, предполагая, что JavaScript понимает классы.

+0

Я понимаю, что этого недостаточно для лучшего ответа (я знаю регулярное выражение, я просто не знаю JavaScript), но если это поможет вам разобраться в решении, то выгода не повредит. :-) – ghoti

0

Наверное, вы ищете утверждение взгляда и утверждение lookbehind в регулярном выражении.

[^\s]*(?<!\s)123(?!\s)[^\s]* 

will match abc123abc only 

Regular expression visualization

Debuggex Demo

Но плохая новость заключается в том, что Javascript регулярное выражение не поддерживает предпросмотр/

утверждение просмотра назад
+0

Насколько я знаю, JavaScript не поддерживает внешний вид expr. – wumpz

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