拆分字符串并保持分隔符不变

时间:2013-07-30 13:23:38

标签: javascript

我找不到使用分隔符字符串拆分字符串的好方法,但是将分隔符保留为结果数组的每个元素的前缀:

var s = 'blah0__blah1__blah2';

我需要

['blah0', '__blah1', '__blah2']

我能得到的最接近的是

s.split(/(__)/);

返回

['blah0', '__', 'blah1', '__', 'blah2']

但是我需要遍历以合并下划线。

有更好的方法吗?

编辑:

这是我迄今为止的最大努力:

'blah__blah1__blah2'.split(/(__[^_]+)/)
// => ["blah", "__blah1", "", "__blah2", ""]

仍然,输出中有空字符串......

6 个答案:

答案 0 :(得分:2)

这个怎么样:

var s = 'blah0__blah__blah'
var s_split = s.match(/(__)?(.(?!__))+./g)
console.log(s_split)

我很确定它比仅仅在常规split之后重复和加入要贵得多(时间和记忆力)。

如果您使用分隔符替换__,则在大多数情况下都可以正常使用。

答案 1 :(得分:1)

分两个步骤。

var s = 'blah0__blah1__blah2';
var blahs = s.split('__');
var scoreBlahs = blahs.map(preScore);
alert(scoreBlahs);
function preScore(b) {
    var x;
    var result = x.concat('__',b);  
    return result; 
}

答案 2 :(得分:1)

'blah0__blah1__blah2'.match(/^[^_]+|_+[^_]+/g);
["blah0", "__blah1", "__blah2"]

似乎能给你你想要的东西。虽然它可能会有所不同,但如果您的输入与您显示的不完全相同。

答案 3 :(得分:0)

在分隔字符串

后,只需添加分隔符
var value = "a,b,c";
var splitter = value.split(",");
for(var i = 0; i < splitter.length; i++) {
    alert("," + splitter[i]);
    }

答案 4 :(得分:0)

因为你知道分隔符 - 稍后再添加它:

var s = 'blah0__blah1__blah2';
var sep = '__';
var arr = s.split(sep);
for (var i = 1; i < arr.length; i++) {
    arr[i] = sep + arr[i];
}

console.log(arr);

答案 5 :(得分:0)

您可以插入辅助分隔符,然后拆分,保留原始分隔符。

var s = 'blah0__blah1__blah2';
s = s.replace('_', '_$');
s.split('$');