наименьшее совпадение в регулярном выражении - PullRequest
2 голосов
/ 06 июля 2011

У меня есть такое выражение:

var string = [a][1] [b][2] [c][3] [d .-][] [e][4]

Мне бы хотелось соответствовать четвертому элементу [d .-][], который может содержать любой символ (буквы, цифры, знаки пунктуации и т. Д.) В первой паре скобок, но вторая пара скобок остается пустой. Другие элементы, например, [a][1], могут содержать любой символ, но у них есть число во второй паре скобок.

Я пробовал это:

string.match(/\\[[^]+]\\[ ]/);

но он слишком жадный.

Любая помощь будет оценена.

1 Ответ

3 голосов
/ 06 июля 2011

Мне бы хотелось соответствовать четвертому элементу [d .-] [], который может содержать любой символ (буквы, цифры, знаки пунктуации и т. Д.) В первой паре скобок, но вторая пара скобок остается пустой

string.match(/\[[^\]]*\]\[\]/)

должен сделать это.

Чтобы разбить его,

\[ соответствует буквальной квадратной скобке слева,

[^\]]* соответствует любому количеству символов, кроме правой квадратной скобки,

\] соответствует буквальной правой квадратной скобке, а

\[\] соответствует последовательности двух символов [], квадратных скобкахмежду ними ничего нет.

Чтобы ответить на ваш вопрос о жадности, вы можете сделать жадное совпадение [^]+ нежадным, добавив знак вопроса: [^]+?.Вы должны знать, что [^] не работает в IE.Для соответствия любому кодовому модулю UTF-16 я обычно использую [\s\S], который немного более многословен, но работает во всех браузерах.

...