求个正则表达式,貌似有点难

loveajin 2012-06-15 12:24:08
任意一个字符组合,从中拿出至少两个不重复的无序组合字符。例子:
ABSNC这几个字符,那么AB BA AS SA ABS BAS SBA 等等都是符合要求的,而AA BB ABA BAA等都是不符合要求的。

规则解释一:
1.给定一个字符组合,在搜索前给定。以ABSNC为例或自定义。
2.从给定的字符组合中取出至少两个不重复的字符。

规则解释二:预定一个字符组合,在搜索前给定。以ABSNC为例或自定义。任意一个待查字符串,满足下列条件为合法字符串:
1.待查字符串中不存在重复字符。
2.待查字符串中的每个字符在预定字符串中都能找到。

PS:按解释二貌似简单点。求高手,拜托!
...全文
117 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
prototyper 2012-06-15
  • 打赏
  • 举报
回复

<script>
var str = "AB BA AS SA ABS BAS SBA AA BB ABA BAA ABQ BWA ATS SAG";
var arr = str.split(" ");

for (var i=0; arr[i]; i++) {
alert(arr[i] + ":" + [!/[^ABSNC]|(.)(?=.*\1)/g.test(arr[i]) ? "合法" : "非法"]);
}
</script>
prototyper 2012-06-15
  • 打赏
  • 举报
回复
表达式:
!/[^ABSNC]|(.)(?=.*\1)/g.test(你要检测的字符串)

示例:

<script>
var str = "AB BA AS SA ABS BAS SBA AA BB ABA BAA ABQ BWA ATS SAG";
var arr = str.split(" ");

for (var i=0; arr[i]; i++) {
alert(arr[i] + ":" + !/[^ABSNC]|(.)(?=.*\1)/g.test(arr[i]));
}
</script>
panghuhu250 2012-06-15
  • 打赏
  • 举报
回复
正则表达式不是最适合这个问题的办法。
likeajin 2012-06-15
  • 打赏
  • 举报
回复
一个弄不来,用两个试试:

var s='AB BA AS SA ABS BAS SBA AA BB ABA BAA'.split(/\s+/);
for(var i=s.length-1;i>=0;i--)alert((!/([ABSNC]).*\1/gi.test(s[i]) && /^[ABSNC][ABSNC]+$/i.test(s[i]))+' '+s[i])
  • 打赏
  • 举报
回复
var getChecker = function(word){
var r = new RegExp((
'(['
+ '\\\\' + word.split('').join('\\\\')
+ '])'
+ '.*?\\1'
), 'i');

return {
check : function(s){
return !r.test(s);
}
};
};

var test = function(units, fn, result){
var i, len, unit;
for(i=0, len=units.length; i<len; i++){
unit = units[i];
try{
if( fn(unit) != result ){
console.error('not passed!');
return;
}
}catch(e){
console.error('not passed!');
return;
}
}
console.log('passed');
};


var checker = getChecker('ABSNC');
test('AB BA AS SA ABS BAS SBA'.split(/\s+/), checker.check, true);
test('AA BB ABA BAA'.split(/\s+/), checker.check, false);

87,923

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧