所以我有这个正则表达式
[a+][a-z-[a]]{1}[a+]
将与字符串"aadaa"
但它也将匹配字符串"aaaaaaaadaa"
有没有办法强迫它只匹配左侧a和右侧a的出现次数应该相同的那些字符串?
,以便仅匹配"aadaa"
而不匹配此"aaaaaaaadaa"
修改
借助彼得的回答,我可以使其正常运行,这是我需要的工作版本
(a+)[a-z-[a]]{1}\1
答案 0 :(得分:5)
您可以使用back reference,如下所示:
console.log(check("ada"));
console.log(check("aadaa"));
console.log(check("aaaaaaaadaa"));
console.log(check("aaadaaaaaaa"));
function check(str) {
var re = /^(.*).\1$/;
return re.test(str);
}
或者仅匹配a
和d
的
console.log(check("aca"));
console.log(check("aadaa"));
console.log(check("aaaaaaaadaa"));
console.log(check("aaadaaaaaaa"));
function check(str) {
var re = /^(a*)d\1$/;
return re.test(str);
}
或者仅匹配{-{1}}以外的a
:
a
我意识到以上所有内容都是 javascript ,对于在SO上下文中进行快速演示很容易。
我使用以下与以上所有代码相似的C#代码制作了DotNetFiddle,可以正常工作:
console.log(check("aca"));
console.log(check("aadaa"));
console.log(check("aaaaaaaadaa"));
console.log(check("aaadaaaaaaa"));
function check(str) {
var re = /^(a*)[b-z]\1$/;
return re.test(str);
}
答案 1 :(得分:0)
您也可以使用以下正则表达式,尽管我希望使用@PeterB建议的正则表达式
console.log(check("aca"));
console.log(check("aadaa"));
console.log(check("aaaaaaaadaa"));
console.log(check("aaadaaaaaaa"));
function check(str) {
var re = /^(\w+)[A-Za-z]\1$/;
return re.test(str);
}
该代码与Peter B的答案中的代码相似,但正则表达式是我更改的代码。