2016-04-15 36 views
-1

我使ajax請求接收文本文件。 我需要閱讀JavaScript中的文本。在Javascript的分割函數中的正則表達式

文本文件是這樣的:


kjnggnfgnfkjg

爲 「鮑勃」

BS 「愛麗絲」

fmdklfmdlkfk

爲 「馬克」

BS「於連」

dfdlf ..


我需要創建兩個陣列,一個與同'as'開始和所述第二有與'bs'字開始行的行。數組中的每個元素不需要具有'as''bs'字以及「」。在這種情況下:

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

你能幫助我嗎?

+0

請分享您嘗試過的代碼嗎? –

+0

我剛剛嘗試過從ajax請求接收的數據: 我使用data.split(''\ n「)爲了讀取每行... 但我無法使用常規表達式... 函數獲取(){.ajax({url:「../local/ exampleText」, dataType:「Text」, success:function(data){b = data.split(「 \ n「); console.log(data)}}); } – raoen

+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"]