2017-01-11 1 views
0

Скажем, у меня есть этотОпределите, сколько строк было сопоставлено с регулярным выражением?

Grocery Shopping // partial match 
Groceries // full match 
Grocery // full match 
Shopping // no match 

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

(Grocer(ies|y)) 

Как я теперь мог определить, является ли вся линия была подобрана или если на частичную линию была сопоставлена? В этом случае это будет частичное совпадение, поскольку я ищу бакалейные товары, но на линии была «Grocery Shopping»

Должен ли я использовать как другую группу и просто поместить (*) и игнорировать пробелы?

+0

с 'M' флагом на этом положительный предпросмотр' (? = $) 'Будет делать это. – revo

+1

'matchedString.length === line.length' –

+0

что вы имеете в виду m флаг? Можете ли вы дать экзамен? Энди, я не уверен, что это будет работать так же, как line.length не будет также учитывать пробелы? – chobo2

ответ

1

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

/^Grocer(?:ies|y)[ \t]*(\S+)?/ 

и проверить на наличие захваченной группы № 1, чтобы знать, если это частичное совпадение или нет. Если первая группа присутствует, то это частичное совпадение, в противном случае это полное совпадение. Это игнорирует все конечные пробелы.

RegEx Demo

+0

Я думаю, что это почти то, что я хочу, но я не хочу, чтобы пробелы шли. Скажем, если после этого у меня есть бакалейные товары с 5 пробелами. Это создаст впечатление, что есть вторая группа. Я, конечно, мог бы сделать некоторые обрезки после, а затем сделать чек, но если я могу сделать все это за один раз, это было бы здорово. – chobo2

+0

поэтому ведущие пробелы не являются проблемой ... –

+0

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