JS + Regexp:匹配任何东西,除非它在[[]]之间

时间:2010-01-10 04:22:52

标签: javascript regex

我有一个<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 个答案:

答案 0 :(得分:1)

如果您的名字有可能包含非字母字符(“Jim-bo O'Leary”?),您可能更喜欢使用/ [^ [] /匹​​配任何不是'['或空格的内容。

然后,您可以加入匹配的字符串以获得新的线条效果。

$("textarea").val().toString().match(/([^\[ ]+|\[\[[^\]]*\]\])/g).join("\n");

答案 1 :(得分:0)

感叹号在正则表达式中没有特别的意义。

您要找的是 (即|运营商)一系列字母

[A-Za-z]+

或两个括号,后跟一些非右括号,后跟两个右括号

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

所以

$("textarea").val().toString().match(/[A-Za-z]+|\[\[[^\]]+\]\]/g)