首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

求个正则表达式,貌似有点难,该怎么处理

2012-06-16 
求个正则表达式,貌似有点难任意一个字符组合,从中拿出至少两个不重复的无序组合字符。例子:ABSNC这几个字符

求个正则表达式,貌似有点难
任意一个字符组合,从中拿出至少两个不重复的无序组合字符。例子:
ABSNC这几个字符,那么AB BA AS SA ABS BAS SBA 等等都是符合要求的,而AA BB ABA BAA等都是不符合要求的。

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

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

PS:按解释二貌似简单点。求高手,拜托!


[解决办法]

JScript code
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);
[解决办法]
一个弄不来,用两个试试:
JScript code
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])
[解决办法]
表达式:
!/[^ABSNC]|(.)(?=.*\1)/g.test(你要检测的字符串)

示例:
JScript code
<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> 

热点排行