输入字符串: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
期望输出:
a=>aa b=>b||b c=>cc
Kobi 的回答是:
var matches = "a=>aa|b=>b||b|c=>cc".match(/(?:[^|]|\|\|)+/g)
.split()
方法并将输出存储在一个数组中。因此我不能使用 .match()
方法。我该怎么做?这是我的尝试:
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 ||)
/
.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
虽然我不喜欢和自己争论,但另一个可能的解决方案是:
var matches = 'a=>aa|b=>b||b|c=>cc'.split(/\b\s*\|\s*\b/g);
|
时,进行拆分。这个版本也将保留d|=d
。\b
可能会引入错误,如果管道不在字母数字字符之间,例如a=>(a+a)|b=>b
将不会拆分。"a=>aa|b=>b||b|c=>cc".split(/\|(?=\w=>)/);
这将产生:
["a=>aa", "b=>b||b", "c=>cc"]
['a=>aa', 'b=>b||b', 'c=>cc']
,还是你来自PHP背景并考虑“哈希表”(在JS中只是一个对象){"a": "aa", "b": "b||b", "c":"cc"}
? - gnarf