如何在JavaScript中拆分此字符串?

时间:2012-08-10 06:35:05

标签: javascript regex arrays split string-split

我有这样的字符串:

ab
rx'
wq''
pok'''
oyu,
mi,,,,

基本上,我想将字符串分成两部分。第一部分应该是字母字符完整,第二部分应该是非字母字符。 字母部分保证在a和z之间是2-3个小写字符;非字母部分可以是任意长度,并且仅被保证为字符,',但不是两个字符串中都有(例如,eex,',将永远不会发生)。< / p>

所以结果应该是:

[ab][]
[rx][']
[wq]['']
[pok][''']
[oyu][,]
[mi][,,,,]

我该怎么做?我猜一个正则表达式,但我并不擅长提出它们。

6 个答案:

答案 0 :(得分:2)

如果你可以100%保证:

  1. 字母字符串为2或3个字符
  2. 总有一个或多个素数/逗号
  3. 字母和标记之前,之后或之间从不存在任何空白区域 (除了换行)
  4. 您可以使用:

    /^([a-zA-Z]{2,3})('+|,+)$/gm
    
    var arr = /^([a-zA-Z]{2,3})('+|,+)$/gm.exec("pok'''");
    arr === ["pok'''", "pok", "'''"];
    
    var arr = /^([a-zA-Z]{2,3})('+|,+)$/gm.exec("baf,,,");
    arr === ["baf,,,", "baf", ",,,"];
    

    当然,请保存一些理智,并将RegEx保存为var。

    作为警告,如果您没有像这样处理RegEx: 如果找不到匹配项 - 如果您尝试通过混合标记匹配foo','',或者您有0-1或4+个字母或0标记...... ...而不是返回一个数组,你会得到null

    所以你可以这样做:

    var reg = /^([a-zA-Z]{2,3})('+|,+)$/gm,
        string = "foobar'',,''",
    
        result_array = reg.exec(string) || [string];
    

    在这种情况下,exec的结果为null;通过放置|| (或)在那里,我们可以返回一个包含原始字符串的数组,作为index-0。

    为什么?

    因为成功执行exec的结果将有3个插槽; [*string*, *letters*, *marks*]。 你可能只想阅读像result_array[1]这样的字母。 但如果匹配失败并且result_array === null,则JavaScript会因您尝试null[1]而尖叫。

    因此,在失败的exec结束时返回数组将允许你获得result_array[1] === undefined(即:模式没有匹配,因此index-1中没有字母),而不是JS错误。

答案 1 :(得分:2)

正则表达式有一个很好的特殊称为“单词边界”(\b)。您可以使用它来检测单词的边界,这是一个字母数字字符序列。

所以你要做的就是

foo.split(/\b/)

例如,

"pok'''".split(/\b/) // ["pok", "'''"]

答案 2 :(得分:0)

你可以尝试类似的东西:

function splitString(string){
   var match1 = null;
   var match2 = null;
   var stringArray = new Array();
   match1 = string.indexOf(',');
   match2 = string.indexOf('`');
   if(match1 != 0){
      stringArray = [string.slice(0,match1-1),string.slice(match1,string.length-1];
   }
   else if(match2 != 0){
      stringArray = [string.slice(0,match2-1),string.slice(match2,string.length-1];
   }
   else{
      stringArray = [string];
   }

}

答案 3 :(得分:0)

var str = "mi,,,,";
var idx = str.search(/\W/);
if(idx) {
    var list = [str.slice(0, idx), str.slice(idx)]
}

您将拥有list[0]list[1]中的部分。

P.S。可能有一些比这更好的方法。

答案 4 :(得分:0)

yourStr.match(/(\ W {2,3})([,'] *)/)

答案 5 :(得分:0)

if (match = string.match(/^([a-z]{2,3})(,+?$|'+?$)/)) {
    match = match.slice(1);
}