按字符串拆分字符串,但跳过某些字符组合

时间:2013-02-27 09:40:33

标签: c# javascript string split

假设我有一个类似于此形式的字符串:

"First/Second//Third/Fourth"(请注意SecondThird之间的双斜杠

我希望能够将此字符串拆分为以下子字符串"First", "Second//Third", "Fourth"。基本上,我想要的是通过char(在这种情况下为/)分割字符串,但不是由该char的两倍(在这种情况下为//)。我虽然在很多方面,但无法让它发挥作用。

我可以使用C#和/或JavaScript中的解决方案。

谢谢!

编辑:我想要一个简单的解决方案。我已经想过用char解析字符串char,但这在我的实际使用中太复杂了。

4 个答案:

答案 0 :(得分:8)

尝试使用这种C#解决方案,它使用积极的lookbehind和积极的前瞻:

        string s = @"First/Second//Third/Fourth";
        var values = Regex.Split(s, @"(?<=[^/])/(?=[^/])", RegexOptions.None);

它说:分隔符为/,前面是除/之外的任何字符,后跟除/之外的任何字符。

这是另一个更短的版本,使用负面的lookbehind和lookahead:

        var values = Regex.Split(s, @"(?<!/)/(?!/)", RegexOptions.None);

这表示:分隔符为/,前面没有/,后面没有/

您可以找到有关'lookarounds' here 的更多信息。

答案 1 :(得分:5)

在.NET Regex中,您可以使用否定断言来执行此操作。(?<!/)/(?!/)将起作用。使用Regex.Split方法。

答案 2 :(得分:3)

你可以做的一件事是根据/拆分字符串。您获取的数组将包含所有使用的//位置的空分配。循环遍历数组并连接i-1i+1分配,其中i是指向空分配的指针。

答案 3 :(得分:2)

这个怎么样:

var array = "First/Second//Third/Fourth".replace("//", "%%").split("/");

array.forEach(function(element, index) {
    array[index] = element.replace("%%", "//");
});