Регулярное выражение, эквивалентное str.substr (0, str.indexOf ('foo')) - PullRequest
0 голосов
/ 20 мая 2011

Учитывая эту строку:

var str = 'A1=B2;C3,D0*E9+F6-';

Я хотел бы получить подстроку, которая идет от начала строки до 'D0*' (исключая), в этом случае:

'A1=B2;C3,'

Я знаю, как этого добиться, используя комбинацию методов substr и indexOf:

str.substr(0, str.indexOf('D0*'))

Демонстрация в реальном времени: http://jsfiddle.net/simevidas/XSu22/

Однако это, очевидно, не лучшее решение, поскольку оно содержит избыточность (имя str должно быть написано дважды).Этой избыточности можно избежать, используя метод match вместе с регулярным выражением, которое захватывает подстроку:

str.match(/???/)[1]

Какой литерал регулярного выражения мы должны передать в match, чтобы убедиться, что правильная подстрокавозвращается?

Я предполагаю, что это: /(.*)D0\*/ (и это работает ), но мой опыт работы с регулярными выражениями довольно ограничен, поэтому мне понадобится подтверждение ...

Ответы [ 4 ]

1 голос
/ 20 мая 2011

Попробуйте:

/(.*?)D0\*/.exec(str)[1]

Или:

str.match(/(.*?)D0\*/)[1]

ДЕМО ЗДЕСЬ

? непосредственно после квантификатораделает квантификатор не жадным (заставляет его совпадать с минимумом вместо максимума определенного интервала). Вот откуда это

1 голос
/ 20 мая 2011
/^(.+?)D0\*/

Попробуйте здесь: http://rubular.com/r/TNTizJLSn9

1 голос
/ 20 мая 2011
/^.*(?=D0\*)/

больше текста для ограничения количества символов ...

0 голосов
/ 20 мая 2011

Вы можете создать группу номеров, как в вашем примере.

/^(.*?)foo/

Это означает что-то вроде:

  • Хранить все в группе, с начала (0)
  • Остановитесь, но не сохраняйте найденное foo (indexOf)

После этого вам нужно сопоставить и получить

'hello foo bar foo bar'.match(/^(.*?)foo/)[1]; // will return "hello "

Это означает, что будет работать с переменной str и получит первую (и уникальную) группу номеров. [0] вместо [1] означает, что будет получен весь соответствующий код.

Пока:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...