2016-07-28 10 views
1

Я пытаюсь написать выражение регулярных выражений в JavaScript, которое будет соответствовать любой строке, если оно начинается с пробела, а затем - октеорп (#), а затем символы. Однако я хотел бы, чтобы это выражение исключало шестнадцатеричные коды.Выражение выражения, которое соответствует #tags, но не шестнадцатеричные коды

У меня есть это выражение для захвата #tags:

/([\s]#[^<\s]+)/g 

и у меня есть выражение, которое захватывает шестнадцатеричные коды в формате (#XXXXXX), что моя большая программа будет получать их:

/(#[0-9a-fA-F]{6,6}\b)/g 

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

Я хотел бы сделать все в одном выражении регулярного выражения. Если это невозможно, я хотел бы узнать, как получить все не-шестнадцатеричные строки, начинающиеся с #, используя комбинацию функций регулярного выражения и JavaScript. Я использую jQuery и Backbone.js, если это помогает.

Экстра Кредит:

В чем разница между этим:

/(#[0-9a-fA-F]{6,6}\b)/g 

и это:

/(#[0-9a-fA-F]{6}\b)/g 

Я использую https://regex101.com написать и проверить мои выражения и оба, похоже, дают одинаковые результаты.

+0

Можете ли вы предоставить тестовый ввод? Что вы пытаетесь сопоставить? Чем вы пытаетесь не совпадать? Дополнительный кредит: вы можете сделать постоянную ссылку regex101.com, которая показывает, что вы делаете. –

+2

Для дополнительного кредита: только разница: '{6}' намного красивее, чем '{6,6}' –

ответ

2

Вы можете использовать второе регулярное выражение как негативный взгляд упреждающий ((?!) внутри вашего первый:

(?:\s|^)(#(?![\da-fA-F]{6}\b)[^<\s]+) 

я добавил на старте возможности начать строку сразу с хэш, не требуя пространство.

См Regex tester

NB: {6,6} действительно точно так же, как и укороченные для этого: {6}. Как указано на regular-expressions.info:

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

Синтаксис является {мин, макс}, где мин равно нулю или положительное целое число, указывающее, минимальное количество совпадений, и макс представляет собой целое число, равное или больше, чем мин указанием максимальное количество совпадений. [...] Опуская как запятую, так и max сообщает двигателю точно повторить токен мин. раз.

+0

Почему вы удалили 0-9 часть из отрицательного выражения и как это решение все еще работать без него? – Simon

+2

Потому что '\ d' эквивалентен. – L3viathan