这几天看了一下正则表达式,发现有时候需求用代码可能几十行,用正则也就几行能完成了。而且比较快。
在看正则的时候顺便百度了一下,有几个问题,来请教下大家,欢迎大家来讨论下哈
1.
正则表达式怎么去除重复的内容
例如
需求:找到出现且只出现1次的数字
12425,就返回145
1324.326 23.5 返回1456
2.同时满足n(n>=2)个条件或以上才能匹配成功
例如:验证密码的时候,密码至少是由符号,字母,数字其中的两项组成的
纯字母或纯数字,纯符号的,匹配不成功
字母+数字,字母+符号,数字+符号,字母+数字+符号都可以匹配成功
现在有5个字符串 a ab abc bcd efg
要求这五个字符串同时出现在一个字符串里面,才能匹配成功
例如:a bo abc bcd ab efg 可以匹配成功
但是 abc bcd efg匹配不成功,虽然"a","ab","abc"……都出现在这个字符串中了
3.
javascript不支持逆向负声明,但是需求中要用到这个怎么办?
------解决方案--------------------------------------------------------
- JScript code
<script type="text/javascript">var str = "12425";var reg = /(.)(.*)\1+/;while(reg.test(str)){str = str.replace(reg,"$1$2");}alert(str);</script>
------解决方案--------------------------------------------------------
1. 这不是正则干的活,直接字符串操作就可以了:
string result=string.Join("","12425".ToCharArray().Distinct().ToArray());
2.以密码验证为例,因为不知道你说的所谓符号指哪些,就以必需同时满足字母+数字为例:
^(?![a-zA-Z]+$)(?!\d+$)[a-zA-Z\d]+$
3.这个要看具体的情况 ,用其他方式来实现
------解决方案--------------------------------------------------------
第二个问题
字母+数字+特殊字符
^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&*]+$)(?![a-zA-z\d]+$)(?![a-zA-z!@#$%^&*]+$)(?![\d!@#$%^&*]+$)[a-zA-Z\d!@#$%^&*]+$
字母+数字,字母+特殊字符,数字+特殊字符
^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&*]+$)[a-zA-Z\d!@#$%^&*]+$
纯数字,纯字母,纯特殊字符
^(?:\d+|[a-zA-Z]+|[!@#$%^&*]+)$
------解决方案--------------------------------------------------------
string result=new string("12425".ToCharArray().GroupBy(a=>a).Where(g=>g.Count()==1).Select(g=>g.Key).ToArray());