为什么JavaScript的split()方法没有拆分":"?

时间:2018-01-28 03:45:36

标签: javascript regex string split

首先,开始,一点上下文。我从以下网址中提取数据:" https://webster.cs.washington.edu/pokedex/pokedex.php?pokedex=all"使用GET方法。返回的数据是一系列口袋妖怪名称和图像名称,格式如下。

Name1:name1.png
Name2:name2.png
...

该列表长达151项。当我调用typeOf()方法" String"返回,所以我相当肯定它是我在这里处理的字符串。我想要做的是在" \ n"的分隔符上拆分字符串。和":"。

我想要的是什么:

Name1,name1.png,Name2,name2.png...

经过Regex的一些实验后,我发现正则表达式是" \ n |:"。使用这个,我编写了以下行来拆分String。我在https://regex101.com上测试了这个正则表达式,它似乎在那里正常工作。

var splitData = data.split("\n|:");

("数据"是我从网址收到的字符串。)

但是,不是拆分String并将子串放入数组中,它不会做任何事情。 (至少我可以看到。)因此,我的下一个想法是尝试用另一个角色替换那些给我带来麻烦的角色然后分裂那个新角色。

data = data.replace("\n", " ");
data = data.replace("/:/g", " ");
var splitData = data.split(" ");

替换新行字符的第一行确实有效,但第二行代替":"好像什么也没做。所以我最终得到一个充满字符串的数组,看起来像这样。

Name1:name1.png

我可以通过调用它们的索引然后拆分存储在其中的子字符串来拆分这些字符串,这只会让我更加困惑。

data = data.replace("\n", " ");
var splitData = data.split(" ");
alert(splitData[0].split(":")[1]);

上面的代码返回" name1.png"。

我是否遗漏了有关split()方法的内容?我的正则表达式错了吗?有没有更好的方法来实现我想要做的事情?

4 个答案:

答案 0 :(得分:1)

现在你正在拆分字符串文字"\n|:"但要做一个你想要的正则表达式data.split(/[:\n]/)

MDN page显示了构建正则表达式的两种方法:

var regex1 = /\w+/;
var regex2 = new RegExp('\\w+');

答案 1 :(得分:0)

以下测试脚本能够为我工作。我决定在分割中使用正则表达式而不是尝试替换字符串中的标记。它似乎为我做了伎俩。

let testResponse = `Abra:abra.png
Aerodactyl:aerodactyl.png`;

let dataArray = testResponse.split(/\n|:/g);
let commaSeperated = dataArray.join(',');

console.log(commaSeperated);

答案 2 :(得分:0)

因此,您可以通过将引号全部排除在一起来使用正则表达式。

您可以查看正则表达式的文档here。他们给出了以下例子:

  

var re = /ab+c/;

     

var re = new RegExp('ab+c');

请参阅下面的预期输出:

var data = `Name1:name1.png
Name2:name2.png`;

var splitData = data.split(/[\n:]/);

console.log(splitData);

//Join them by a comma to get all results
console.log(splitData.join(','));

//For some nice key value pairs, you can reduce the array into an object:

var kvps = data.split("\n").reduce((res, line) => {
  var split = line.split(':');
  return {
      ...res,
      [split[0]]: split[1]
  };
}, {});

console.log(kvps);

答案 3 :(得分:-1)

我试过,这很好用。

 str.split(/[:\n]/)

这是一个掠夺者。

plunker