2013-08-13 6 views
2

Так что я пытаюсь соответствовать (любой) слово (а), что будет иметь:Regex за одно слово в предложении

  1. По крайней мере один буква верхнего регистра
  2. По крайней мере, один нижний регистр письмо
  3. по крайней мере один номер

в настоящее время я к этому с помощью lookaheads

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).+$ 

Но я не могу заставить это соответствовать одному слову. Я попытался использовать \b вокруг взглядов, но он не работает. Слово, которое я пытаюсь сопоставить, может иметь вышеуказанные условия в любом порядке. Пример: aB5 ИЛИ Ba5 ИЛИ 5Ba и т. Д. Нужны некоторые указатели.

+0

какой язык? –

+0

Я использую его в coffeescript. Но это говорит о том, что основная идея, как это сделать, не была бы специфичной для языка? – noMAD

+2

Вы уверены, что хотите использовать одно регулярное выражение, а не что-то вроде последовательности фильтров? т. е. отфильтровывать все слова без [A-Z], тогда все слова w/o [a-z], то все слова w/o [0-9]? – squadette

ответ

3

Основная проблема заключается в том, что . содержит пробелы. Вам необходимо изменить свой ., чтобы он ограничивался только текстовыми символами, то есть \w. Обратите внимание, что \w (в основном) [A-Za-z0-9_], если вы хотите исключить некоторые из них или включить их, вы должны внести соответствующие изменения.

Другое дело, что если вы ищете слова в строке, вам нужно удалить ^ и $, потому что они означают начало и конец строки соответственно.

Поскольку все ваши требования «по крайней мере» (в отличие от «не более»), вам действительно не нужно \b, потому что совпадение происходит слева направо, поэтому вы никогда не сможете получить часть слова.

Regex:

(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])\w+ 

Test.

2

В настоящее время я получил на это с помощью lookaheads

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).+$ 

Но я не могу получить это, чтобы соответствовать по одному слову.

Lookaheads является правильным подходом, но если вы хотите, чтобы найти отдельные слова, только вы не должны допустить, чтобы каждый символ (.) в между но только словесными символами (как \w). Таким образом,

/(?=\w*\d)(?=\w*[a-z])(?=.\w[A-Z])\w+/g 

должен это сделать. Конечно, вы можете разрешить больше писем, чем только \w, может быть, даже \S.

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