2017-09-02 78 views
0

我如何使用JavaScript編寫,使得它解析字符串"1.aaa 2.bbb 3.ccc"["aaa","bbb","ccc"]正則表達式之間的多個比賽。JavaScript的正則表達式找到兩個字符串

這裏是我的代碼:

var str = "1.aaa 2.bbb 3.ccc"; 
 
var reg1 = /\d+\.(.*)\d+\./g; //sub regexp $1 match "aaa 2.bbb" 
 
var reg2 = /\d+\.(.*?)\d+\./g; //sub regexp $1 match "aaa" 
 
var reg3 = /\d+\.(.*?)(?=\d+\.)/g; //sub regexp $1 match "aaa" 、 "bbb" 
 
var reg4 = /\d+\.(.*?)(?=\d+\.)|\d+\.(.*)/g; //sub regexp $1 match "aaa" 、 "bbb"、undefined,my expect is $1 match "aaa"、「bbb」、「ccc」 
 

 
str.replace(reg1, function(match, p1, p2, offset, string) { 
 
    console.log("---reg1---") 
 
    console.log(p1) 
 
}) 
 

 
str.replace(reg2, function(match, p1, p2, offset, string) { 
 
    console.log("---reg2---") 
 
    console.log(p1) 
 
}) 
 

 
str.replace(reg3, function(match, p1, p2, offset, string) { 
 
    console.log("---reg3---") 
 
    console.log(p1) 
 
}) 
 

 
str.replace(reg4, function(match, p1, p2, offset, string) { 
 
    console.log("---reg4---") 
 
    console.log(p1) //sub regexp $1 match "aaa" 、 "bbb"、undefined,my expect is $1 match "aaa"、「bbb」、「ccc」 
 
})

有一個簡單的解決方案,這樣做嗎?

+0

你能修改你的問題解釋你在做什麼好一點,請...我不明白你的最終目標... –

+0

請編輯您的問題提供了一個最小的代碼示例,展示了你的努力,並告訴我們想要達到的目標。提高語法。 – yacc

回答

0

我會做這樣的事情: (更新了第二個例子)

var s = "1.aaa 2.bbb 3.ccc"; 
 
var r = /\d+\.([^\d]*)/g; 
 

 
var s2 = "1.aaa[2017-01-01] 2.bbb 3.ccc" 
 
var s3 = "1.aaa[2017-01-01] 2.bbb[2017-01-01] 3.ccc" 
 
var s4 = "1.aaa[2017-01-01] 2.bbb 3.ccc[2017-01-01]" 
 
var r2 = /\d+\.(.*?)(|$)/g 
 

 
function getGroups(s,r){ 
 
    var matches = []; 
 
    var m = r.exec(s); 
 

 
    while (m != null){ 
 
     matches.push(m[1]); 
 
     m=r.exec(s); 
 
    } 
 
    return matches; 
 
} 
 
console.log(getGroups(s,r)); // ['aaa','bbb','ccc'] 
 
console.log(getGroups(s2,r2)); // [ 'aaa[2017-01-01]', 'bbb', 'ccc' ] 
 
console.log(getGroups(s3,r2)); // [ 'aaa[2017-01-01]', 'bbb[2017-01-01]', 'ccc' ] 
 
console.log(getGroups(s4,r2)); // [ 'aaa[2017-01-01]', 'bbb', 'ccc[2017-01-01]' ]

更多信息,請參見this question

+0

它也適用於這個例子,但如果字符串是這樣的:「1.aaa [2017年9月2日] 2.bbb 3.ccc」,如何寫用正則表達式[^]無「/\d+\.([a-z0-9-\[\]]*)/g」 – user1841488

+0

已更新。如果您想包含數字,則不能執行「非數字」組。 –

0

既然你沒有提供多少信息,這是我能夠拿出最好的。

var str="1.aaa 2.bbb 3.ccc"; 
 
str = '"' + str.replace(/(\d+\.)([a-z]+)/g, '$2').split(' ').join('","') + '"' 
 

 
console.log(str)

+0

它工作得很好,TXS – user1841488

相關問題