繁体   English   中英

JS + Regexp:匹配除[[]]之间的所有内容

[英]JS+Regexp: Match anything except if it's between [[ ]]

我有一个<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));

我有点迷路了。 我尝试匹配然后替换,但是那样我将无法恢复我的原始字符串。 因此,我必须匹配双括号之外的所有内容并替换空格。

如果您的名字有可能包含非字母字符(“ Jim-bo O'Leary”?),则您可能更喜欢使用'['或使用/ [^ [] /来代替空格的内容。

然后,您可以连接匹配的字符串以获取新的线条效果。

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

感叹号在正则表达式中没有特殊含义。

什么你要找的 (这意味着|运营商)的字母序列

[A-Za-z]+

或两个括号,然后是一些非闭合括号,然后是两个闭合括号

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

所以

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM