JavaScript中拆分字符串的帮助

3

我曾经提出过一个关于如何拆分以下字符串的问题:

输入字符串: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() 方法。我该怎么做?

关于“输出”的一个问题 - 你想要 ['a=>aa', 'b=>b||b', 'c=>cc'],还是你来自PHP背景并考虑“哈希表”(在JS中只是一个对象){"a": "aa", "b": "b||b", "c":"cc"} - gnarf
4个回答

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" }

还有正则表达式:

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

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

1
实际上,我需要这个问题来完成我的编译器课程。 我向我的教授解释了匹配函数,他说你必须用split回答这个问题... 还有一件事: 输入是:a=>aa|b=>b||b|c=>cc(每个字符之间没有空格) - Hero

1

虽然我不喜欢和自己争论,但另一个可能的解决方案是:

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

意思是:当您看到由空格包围且介于字母数字字符之间的|时,进行拆分。这个版本也将保留d|=d\b可能会引入错误,如果管道不在字母数字字符之间,例如a=>(a+a)|b=>b将不会拆分。

0
我在您此问题的另一个副本中发布了这个(请不要重复提问!)
这应该可以解决问题:
"a=>aa|b=>b||b|c=>cc".split(/\|(?=\w=>)/);

这将产生:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接