Javascript的split函数中的正则表达式

时间:2016-04-15 13:45:20

标签: javascript regex split

我发出ajax请求来接收文本文件。 我需要在javascript中阅读这篇文章。

Text文件是这样的:

  

kjnggnfgnfkjg

     

as“bob”

     

bs“alice”

     

fmdklfmdlkfk

     

as“Marc”

     

bs“Julien”

     

dfdlf ..

我需要创建两个数组,一个是以'as'开头的行,另一个是以'bs'个单词开头的行。数组的每个元素都不需要'as''bs'字以及“”。在这种情况下:

a=[bob,Marc] and b=[alice,julien]

你能帮我吗?

1 个答案:

答案 0 :(得分:1)

将文本拆分为行后,您可以过滤并映射这些文本:

var lines = t.split('\n');
var asPattern = /^as \"(\w+)\"$/;
var bsPattern = /^bs \"(\w+)\"$/;
a = lines.filter(l => l.match(asPattern))
         .map(l => l.replace(asPattern, "$1"));
b = lines.filter(l => l.match(bsPattern))
         .map(l => l.replace(bsPattern, "$1"));

list.filter(predicate)将返回与谓词匹配的项的子列表。这里我们使用lambda函数作为谓词,只有当行匹配模式时才会返回true。

>lines
["kjnggnfgnfkjg", "", "as "bob"", "", "bs "alice"", "", "fmdklfmdlkfk", "", "as "Marc"", "", "bs "Julien"", "", "dfdlf"]
>lines.filter(l => l.match(/^as \"(\w+)\"$/))
["as "bob"", "as "Marc""]

list.map(transformationFunction)将返回转换函数应用于初始列表的每个元素的结果列表。在这里,我们重用相同的模式,并使用其第一个组作为替代。

>filteredLines
["as "bob"", "as "Marc""]
>filteredLines.map(l => l.replace(/^as \"(\w+)\"$/, "$1"))
["bob", "Marc"]