Регулярное выражение для захвата команды

Как я могу создать регулярное выражение, которое соответствует clear abc, а затем зафиксировать abc, которое может варьироваться?

Команда clear всегда будет одинаковой, а структура строки всегда будет clear ?, где ? может варьироваться.

Я предполагаю, что это что-то вроде /^clear \w$/, где ^ гарантирует, что строка начинается с clear. Но я хочу убедиться, что он соответствует только тому, что имеет два слова, где первое слово clear, чтобы оно не соответствовало, например, clear ab cd ef. Слово после clear может состоять как из 1 символа, так и из нескольких символов, но никогда не может начинаться с цифры.

Редактировать

Из ответов я получил регулярное выражение /^clear [a-zA-Z]\w*$/.

Что, если переменная после очистки может быть такой, как a и ab, а также f(x, y). Тогда это будет просто /^clear [a-zA-Z][0-9a-zA-Z() ]*$/, поэтому он также принимает (, ) и пробел ()?

Can it be a little more robust by making sure it has the design f(...), если он когда-либо содержит круглые скобки, поэтому я не совпадаю, например, f)dsada?


person Jamgreen    schedule 15.07.2016    source источник
comment
Какой конкретный синтаксис регулярного выражения? BRE, ERE, PCRE, re2? \w соблюдается не везде.   -  person Charles Duffy    schedule 15.07.2016
comment
Я не знаю. Я использую его на веб-сайте JavaScript   -  person Jamgreen    schedule 15.07.2016


Ответы (1)


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

Вы можете использовать это регулярное выражение:

/^clear [a-zA-Z]\w*$/
  • [a-zA-Z] гарантирует, что он начинается с алфавита
  • \w* после будет соответствовать 0 или более символам слова после первой буквы

Если доступно POSIX классов символов, используйте:

/^clear [[:alpha:]][[:alnum:]_]*$/
person anubhava    schedule 15.07.2016
comment
[a-zA-Z] не гарантируется выполнение намеченных действий во всех локалях; лучше использовать [[:alpha:]] - person Charles Duffy; 15.07.2016
comment
Кажется, я не могу использовать POSIX, но первое регулярное выражение сработало: D В javascript я могу использовать regex.test(str) для проверки, но как мне зафиксировать значение переменной после очистки? - person Jamgreen; 15.07.2016
comment
Если переменная clear является допустимым идентификатором, вам лучше использовать [a-zA-Z_]\w* для его сопоставления. - person Wiktor Stribiżew; 15.07.2016
comment
Я отредактировал свой вопрос. Надеюсь, все в порядке. В противном случае я создам новый вопрос - person Jamgreen; 15.07.2016
comment
@Jamgreen: на основе отредактированного вопроса вы можете попробовать это регулярное выражение: /^clear [a-zA-Z_][\w (),]*$/ - person anubhava; 15.07.2016
comment
Но тогда он также принимает clear a b. Я думаю, мне нужно проверить, является ли структура ?(?), где оба ? могут быть чем угодно, и если это так, то я приму пробел и запятую. - person Jamgreen; 15.07.2016
comment
Будет ли в этом случае работать ^clear [a-zA-Z_](\([^)]*\)|\w*)$? - person anubhava; 15.07.2016
comment
Я должен захватить все. И первый персонаж, и остальные. Но в остальном это выглядит правильно! - person Jamgreen; 15.07.2016