JS + Regexp: сопоставить что угодно, кроме случаев, когда между [[]] - PullRequest
1 голос
/ 10 января 2010

У меня есть <textarea>, который будет в основном списком имен, поэтому я установил функцию замены пробелов между именами для новой строки.

Теперь мне нужно указать, что два или более пробелов между именами фактически являются частью одного и того же элемента.
IE:

John Lucas [[Laurie Vega]] [[Daniel Deer]] Robert

Должен обратиться к

John
Lucas
[[Laurie Vega]]
[[Daniel Deer]]
Robert

Так что теперь мое регулярное выражение $("textarea").val().toString().replace(\ \g, '\n'); нарушено, так как оно добавит новую строку перед Vega и Deer.

Мне нужно заменить все, что не находится между [ и ]. Я просто сделал обратное и попытался отрицать это, но это не сработало:

// Works
$("textarea").val().toString().match(/\[([^\]]*)\]/g));
// Am I using the ! operand wrong?
$("textarea").val().toString().match(/!\[([^\]]*)\]/g));

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

Ответы [ 2 ]

1 голос
/ 12 января 2010

Если есть вероятность, что ваши имена содержат не алфавитные символы («Джим-бо О'Лири»?), Вы можете предпочесть сопоставить что-либо, кроме «[» или пробела, используя / [^ [] /.

Затем вы можете объединить соответствующие строки, чтобы получить эффект новой строки.

$("textarea").val().toString().match(/([^\[ ]+|\[\[[^\]]*\]\])/g).join("\n");
0 голосов
/ 10 января 2010

Восклицательный знак не имеет особого значения в регулярном выражении.

То, что вы ищете, это либо (что означает оператор |) последовательность букв

[A-Za-z]+

или две скобки, за которыми следуют несколько не закрывающих скобок, а затем две закрывающие скобки

\[\[[^\]]+\]\]

So

$("textarea").val().toString().match(/[A-Za-z]+|\[\[[^\]]+\]\]/g)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...