2014-10-09 3 views
1

Пожалуйста, может кто-то помочь мне с регулярным выражением для проверки строки этого шаблонаJavascript шаблон проверка

aaa [bbb] 

Я хочу на вход в формате, выраженный выше. aaa & bbb может быть любой комбинацией одного или нескольких слов, которые могут также содержать специальные символы. bbb должен содержаться в квадратных скобках ([...]). Полная строка может иметь начальное или конечное пространство.

Я попытался это:

var re=/\w{0,} \[*\w{0,}\]/ 

Но он возвращает ложь на тестовой строки, как:

re.test("onc>*!llklk[dd<dfd]") 
+0

Да, но это/\ ш {0} \ [* \ ш {0} \]/тест ('ааа [ГЭБ!]). сбой – Paullo

ответ

1

Во-первых, чтобы сделать его более удобным для чтения, вы можете заменить {0,} от *, поскольку это то же самое. Далее, \w не соответствует некоторым символам, таким как > или *, вы можете использовать . для соответствия любому символу. Затем, как говорится в другом ответе, вы ожидаете пробел между двумя группами (aaa и [bbb]), поэтому ваш пример не будет соответствовать.

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

/.+\[.+\]/ 

Try it here

+0

Спасибо @lechariotdor Я протестировал ваше решение, кажется, все в порядке, но не прошел этот тест /.*\[.*\]/.test("[dd Paullo

+0

Итак, если вам понадобится хотя бы 1 символ перед группой [bbb], вы должны заменить первый '*' на '+'. Я редактировал. Если вам нужен хотя бы один символ между '[]', вы также должны заменить второй '*'. – tiledcode

+0

Еще раз спасибо за ваши усилия, но последнее решение не проходит этот тест /.+\[.*\]/. Test ("sdsd!sdsd [] "). Это должно возвращать false – Paullo

2

Ваше регулярное выражение явно требует пространства, чтобы присутствовать. Мы можем представить себе это с Regexper:

Example

Это возвращает ложь на "onc>*!llklk[dd<dfd]", потому что нет пробела.

Чтобы устранить проблему, либо использовать тестовую строку, которая имеет пробел, или изменить регулярное выражение, чтобы не требовать этого символа:

var re = /\w{0,}\[*\w{0,}\]/; 
re.test("aaa [bbb]"); 
> true 

re.test("onc>*!llklk[dd<dfd]"); 
> true 

Вы можете пересмотреть регулярное выражение, хотя , потому что, как он стоит, один "]" персонаж будет проходить тест:

re.test("]"); 
> true 
+0

Спасибо @James Donnelly – Paullo

2
\S+\s*\[\S+?\] 

Вы можете попробовать это, если вы хотите, чтобы специальные символы.

http://regex101.com/r/yA1jY6/3

+0

Спасибо @vks, это замечательно. Прошла серия тестов, ожидающих/\ S + \ s * \ [\ S +? \]/.test ("sdsd! sdsd [hjhj * sfsd]") и/\ S + \ s * \ [\ S +? \] /. test ("sdsd! sdsd [hjhj * sfsd]"). Можете ли вы мне помочь ? – Paullo

+0

Извините, я имею в виду, что это замечательно. Прошла серия тестовых примеров, ожидающих/\ S + \ s * [\ S +?] /. Test ("sdsd! Sdsd []"). Пожалуйста, вы можете мне помочь? bbb и/\ S + \ s * [\ S +?] /. test ("[]") также передано – Paullo

+0

@Paullo Это полностью изменит вопрос и ответ. Предлагаю вам опубликовать новый вопрос со всеми требованиями. принято :) – vks

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