正则表达式查找至少有一个大写字母的子字符串,只有字母

问题描述:

我必须找到一个字符串的所有子字符串,至少有一个大写字母,没有数字允许,只有[a-zA-Z],不存在空格。正则表达式查找至少有一个大写字母的子字符串,只有字母

然后,如果我有像"s=aAb0sDa"这样的字符串,则s.match(regex)匹配必须返回:["A", "aA", "Ab", "aAb", "sD", "Da", "sDa", "D"]

我想的唯一的事情是s.match(/[a-z]*[A-Z]+[a-z]*/g),但它只返回["aAb", "sDa"]

任何想法?

+1

它可能无法单独使用正则表达式,因为正则表达式匹配过程中字符只有一次。 – gurvinder372

+1

“aaBCaa”是什么?如果结果是'['aaB','aaBC','aaBCa','aaBCaa','aB','aBC','aBCa','aBCaa','B','BC','BCa', 'BCaa','C','Ca','Caa']'? –

+0

@NinaScholz:是 – 3vi

你可以用一些蛮力与一些正则表达式来检查。

function getParts(string) { 
 
    var result = []; 
 
    string.split(/[^a-z]/i).forEach(function (a) { 
 
     var i, j, match; 
 
     for (i = 0; i < a.length; i++) { 
 
      for (j = i + 1; j < a.length + 1; j++) { 
 
       match = a.slice(i, j).match(/[a-z]*[A-Z]+[a-z]*/); 
 
       match && result.push(match[0]); 
 
      } 
 
     } 
 
    }); 
 
    return result; 
 
} 
 

 
console.log(getParts('aAb0sDa1aaBCaa'));
.as-console-wrapper { max-height: 100% !important; top: 0; }

+1

这是一个很好的答案++ – anubhava

试试这个:^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*(_|[^\w])).+$

谢谢。

+3

小心解释这个答案是干什么的? –

+0

它返回null – 3vi