在JavaScript中按字符拆分但不是连续的

时间:2013-01-08 14:44:18

标签: javascript regex string split contiguous

情况如下:

var stringExample = "hello=goodbye==hello";
var parts = stringExample.split("=");

输出:

hello,goodbye,,hello

我需要这个输出:

hello,goodbye==hello

必须忽略连续/重复的字符,只需单个"="即可拆分。

也许是一些正则表达式?

3 个答案:

答案 0 :(得分:6)

您可以使用正则表达式:

var parts = stringExample.split(/\b=\b/);

\b检查字边界。

答案 1 :(得分:3)

最有可能的是,@ dysys回答是你正在寻找的回答。但是,如果除了字母数字(A-Za-z0-9_)之外的任何字符都可以围绕“分裂=”,那么他的解决方案就会胜出'工作。例如,字符串

It's=risqué=to=use =Unicode!=See?

将分成

"It's", "risqué=to", "use Unicode!=See?"

因此,如果您需要避免这种情况,通常会使用lookbehind断言:

result = subject.split(/(?<!=)=(?!=)/);  // but that doesn't work in JavaScript!

因此,即使 仅在单个=上拆分,也无法使用它,因为JavaScript不支持(?<!...) lookbehind断言。

幸运的是,您始终可以通过匹配分隔符之间允许的所有内容,将split()操作转换为全局match()操作:

result = subject.match(/(?:={2,}|[^=])*/g);

会给你

"It's", "risqué", "to", "use ", "Unicode!", "See?"

答案 2 :(得分:-1)

对可能的解决方案的第一个近似可能是:

".*[^=]=[^=].*"

请注意,这只是正则表达式,如果你想将它与egrep,sed,java regex或其他什么一起使用,请注意是否需要转义。

当心!:这是第一次近似,可以改进。请注意,例如,此正则表达式将不匹配此字符串“=”(null - 等于 - null)。