帮助在JavaScript中拆分字符串

时间:2010-04-30 05:16:02

标签: javascript regex

I'd asked a question about the splitting the a string like below:

输入字符串:a=>aa| b=>b||b | c=>cc

和输出:

a=>aa
b=>b||b 
c=>cc

Kobi的回答是:

var matches = "a=>aa|b=>b||b|c=>cc".match(/(?:[^|]|\|\|)+/g)

他的回答有效,但我需要使用.split()方法并将输出存储在数组中。

所以我不能使用.match()方法。

我该怎么做?

4 个答案:

答案 0 :(得分:2)

这是我的刺:

var str = 'a=>aa| b=>b||b | c=>cc';
var arr = str.split(/\s*\|\s+/);
console.log(arr)
// ["a=>aa", "b=>b||b", "c=>cc"]

var obj = {}; // if we want the "object format"
for (var i=0; i<arr.length; i++) {
  str=arr[i];
  var match = str.match(/^(\w+)=>(.*)$/);

  if (match) { obj[match[1]] = match[2]; }
}
console.log(obj);

// Object { a:"aa", b:"b||b", c: "cc" }

RegExp:

/
 \s*   # Match Zero or more whitespace
 \|    # Match '|'
 \s+   # Match one or more whitespace (to avoid the ||)
/

答案 1 :(得分:1)

.match也返回数组,因此使用.match

没有问题
arr = "a=>aa|b=>b||b|c=>cc".match(/(?:[^|]|\|\|)+/g)
// a=>aa,b=>b||b,c=>cc
arr.length
// 3
arr[0]
// a=>aa

答案 2 :(得分:1)

虽然我讨厌与自己争论,但另一种可能的解决方案是:

var matches = 'a=>aa|b=>b||b|c=>cc'.split(/\b\s*\|\s*\b/g);

含义:当您看到|被空格包围时,以及字母数字字符之间的分割  此版本也会保留d|=d完整 \b可能会引入错误,但如果管道不在字母数字字符之间,则可能不会拆分,例如a=>(a+a)|b=>b不会拆分。

答案 3 :(得分:0)

我在这个问题的另一个副本中发布了这个问题(请不要多次提问!)

应该这样做:

"a=>aa|b=>b||b|c=>cc".split(/\|(?=\w=>)/);

产生:

["a=>aa", "b=>b||b", "c=>cc"]