2015-07-03 4 views
2

Я новичок в регулярных выражениях, я пытаюсь получить все строки между «#» и пробелом или любым пробелом.Регулярное выражение, чтобы получить что-либо между двумя указанными символами

У меня есть строка, как это:

gray 47 #787878 120 120 120 7895160 
gray 46 #757575 117 117 117 7697781 
gray 45 #737373 115 115 115 7566195 
gray 44 #707070 112 112 112 7368816 
gray 43 #6E6E6E 110 110 110 7237230 
gray 42 #6B6B6B 107 107 107 7039851 

, и я хотел бы получить только коды RGB от него:

787878 
757575 
737373 
707070 
6E6E6E 
6B6B6B 

Я пытаюсь регулярное выражение, как это:

\#\w+\s 

Я тестирую это на regex101.com, и он говорит: нет совпадений.

Что я делаю неправильно?

+0

Пожалуйста, проверьте мой ответ – Bannings

ответ

2

Вам не нужно избегать октоторпа; это просто буквальный символ «#». Кроме того, если вы не хотите сохранять пространство, вы должны сделать его не захватывающим. Что-то вроде следующего:

/(?:#)(\w+)(?:\s)/g 

В самом деле, вы должны быть в состоянии точно указать 6-значные алфавитно-цифровые, чтобы сделать его еще более конкретно и тогда она не будет искать подчеркивания, например:

/(?:#)([\da-zA-Z]{6})/g 

EDIT:

Добавлено круглые скобки, чтобы сделать его захватить данные, которые вы заботитесь о.

EDIT 2:

Пожалуйста, не могли бы вы уточнить, что именно означает «Вы не должны , чтобы избежать знак числа» и «сделать это не-захват» в отдельных Примеры регулярных выражений.

Некоторые символы имеют специальное значение с помощью двигателей регулярных выражений. Вот несколько примеров:

$ 
^ 
. 
+ 

Если вы хотите, чтобы соответствовать любому из этих символов в буквальном смысле, с помощью регулярных выражений, вы бы «убежать» эти символы. Например, если у вас есть такой текст: «? $^EATING?» и вы хотели бы сопоставить «EATING», вам нужно было бы написать регулярное выражение: EATING\?\?, потому что «?» особый.

Если вы положили \ перед специальным символом, это называется «экранированием», так что механизм регулярных выражений будет рассматривать его как буквенный символ.

Характер знак числа (эта вещь: #) является не особый характер, так что вам не нужно, чтобы избежать этого. Это трактуется буквально, как и следующие символы: 8 o.

Кроме того, вы можете искать материал с помощью регулярных выражений, но не «захватывать» этот материал.Это способ сказать следующее:

«Я хочу найти« a », а затем« b », а затем« c », но я хочу сохранить« a »и« b », и выбросить «c».

Группы без захвата - это то, как вы обычно это делаете.

+0

результат включает в себя знак #, который я не хочу, но, пожалуйста, не могли бы вы уточните, что именно означает «вам не нужно избегать октоторпа» и «сделать его не захватывающим» в отдельных примерах регулярных выражений, поскольку я не понимаю ваше регулярное выражение вообще –

+0

также, почему у вас есть/# вместо \ #?Пожалуйста, объясните, что –

+0

первый и последний '/' связаны с движком regex на той странице, которую вы связали: вот как Javascript обозначает шаблон регулярного выражения. * Фактический * шаблон между ними. – erewok

1

Вы должны использовать положительные и позитивный назад 'предпросмотр:

/(?<=#)\w+(?=\s)/g 

Это будет соответствовать только всем строкам между «#» и пространством или любым белым пространством.

Выход

787878 
757575 
737373 
707070 
6E6E6E 
6B6B6B 

Положительный назад '

Положительный' назад с ?<= проверяет, что его подшаблон может соответствовать сразу слева от текущей позиции в текстовой строке.

Регулярное выражение (?<=#)\w+\s соответствует 787878, но только если ему предшествует #.

Положительного опережение

Положительное опережение с ?= заглядывает вперед, чтобы убедиться, что его подшаблон может соответствовать.

Регулярное выражение #\w+(?=\s) соответствует #787878, но только если за ней следует /s (любой пробел символ).

Таким образом, вы должны использовать регулярное выражение /(?<=#)\w+(?=\s)/g или просто /(?<=#)\w+/g который будет соответствовать 787878, если она сопровождается /s и предшествует #.

+0

Что вы подразумеваете под lookbehind и lookahead? –

+0

также, что означает '? <=' И '? =' Означает? –

0

Ваше решение

\#\w+\s 

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

# 

затем

#\w 

Это должно делать то, что вы хотите

#(\w+\s) 
Смежные вопросы