2017-09-02 77 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

相关问题