在 JavaScript 中由一个字符而不是连续的字符分割
Posted
技术标签:
【中文标题】在 JavaScript 中由一个字符而不是连续的字符分割【英文标题】:Split by a character in JavaScript but not contiguous ones 【发布时间】:2012-12-22 10:50:03 【问题描述】:情况如下:
var stringExample = "hello=goodbye==hello";
var parts = stringExample.split("=");
输出:
hello,goodbye,,hello
我需要这个输出:
hello,goodbye==hello
连续/重复的字符必须忽略,只取单个"="
进行拆分。
也许是一些正则表达式?
【问题讨论】:
在您想要拆分的=
s 周围是否总是有字母数字字符?或者有没有像hello:=!goodbye
这样的东西应该分成hello:
和!goodbye
?
【参考方案1】:
@dystroys 的答案很可能就是您要找的答案。但是,如果字母数字以外的任何字符(A-Z
、a-z
、0-9
或 _
)可以围绕“拆分 =
”),那么他的解决方案将不起作用。例如,字符串
It's=risqué=to=use =Unicode!=See?
会被拆分成
"It's", "risqué=to", "use Unicode!=See?"
因此,如果您需要避免这种情况,通常会使用后向断言:
result = subject.split(/(?<!=)=(?!=)/); // but that doesn't work in javascript!
所以即使这个会只在单个 =
s 上拆分,你也不能使用它,因为 JavaScript 不支持 (?<!...)
后向断言。
幸运的是,您始终可以通过匹配在分隔符之间允许的所有内容,将split()
操作转换为全局match()
操作:
result = subject.match(/(?:=2,|[^=])*/g);
会给你
"It's", "risqué", "to", "use ", "Unicode!", "See?"
【讨论】:
+1 我想知道为什么我正在测试的split
的后视功能不起作用。是“在 Javascript 中不起作用!”记录在某处?
@dystroy: regular-expressions.info/refflavors.html 是我的首选资源(或 RegexBuddy)。
match
在处理以分隔符开头/结尾的字符串的方式上通常不等同于 split
。此外,它可以返回null
。转换并非微不足道:-) 至少您需要使用*
而不是+
@Bergi:对,*
是。但我认为现在的结果相当于我上面提到的正则表达式的(虚构的)拆分。【参考方案2】:
可能的解决方案的初步近似可能是:
".*[^=]=[^=].*"
请注意,这只是正则表达式,如果您想将它与 egrep、sed、java 正则表达式或其他任何东西一起使用,请注意是否需要转义。
注意!:这是第一个近似值,可以改进。请注意,例如,此正则表达式不会匹配此字符串 "=" (null - equal - null)。
【讨论】:
你能详细说明在 OP 的情况下应该如何使用这个正则表达式吗? @dystroyprecise
不是动词,但看看你的个人资料,我知道你一定会说法语。
@dystroy 我不明白你。 OP是什么意思?如果您要询问如何在程序中/与程序一起使用该正则表达式的示例,让我们看看它。文件内容:hello=world hell0==w0rld bye=cruel==world by3==cru3l=w0rld = == ===
OP 想要拆分一个字符串。您能否使用您的正则表达式生成所需的 javascript 代码,或者您的答案真的只是一个评论?
好的,现在我意识到我不能在 cmets 中使用代码块 ¬¬。我也花了 5 分钟来更改评论。解释你想问什么,我会回答你的:)【参考方案3】:
您可以使用正则表达式:
var parts = stringExample.split(/\b=\b/);
\b
检查单词边界。
【讨论】:
我认为只有等号应该被忽略,而不是任何非单词字符。 @Bergi 我不确定我是否看到您的问题。你能举个例子吗?hello(=)goodbye
不会拆分为 hello(
和 )goodbye
例如 - 我相信这是意料之中的(需要 OP 澄清,请)
@Bergi 好的,我明白你的意思了。我认为我们应该为此使用lookbehind。
@dystroy:是的,只是 JS 不支持lookbehind,这就是让任务变得复杂的原因:-)以上是关于在 JavaScript 中由一个字符而不是连续的字符分割的主要内容,如果未能解决你的问题,请参考以下文章
在 Android Java 中由另一个线程更新 textView
为啥在字符串中使用 javascript 转义字符的引号需要是 \\' 而不是 \'
如何在 C# 中由 .NET WebBrowser 控件托管的页面中调用 JavaScript 方法并将参数传递给 JavaScript 方法? [复制]