请问一个正则表达式,有关匹配与或非的。 这种用正则还不如拆分字符串来的简单str = '1234567890?aa=1&cc=2&dd=3&ee=4';arr = str.match(/[a-z]+(?==[^&]+)/g);然后对该数组进行分析 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>shawl.qiu template</title><style type="text/css">/* <![CDATA[ *//* ]]> */</style><script type="text/javascript">//<![CDATA[ if (navigator.appName=="Microsoft Internet Explorer") { //最大化窗口 self.moveTo(-5,-5) self.resizeTo(screen.availWidth +8,screen.availHeight+8) //这个脚本定义的宽度其实比原窗口还要大那么一点. }//]]></script><script type="text/javascript">//<![CDATA[ var ar=[]; ar[0]='1234567890?aa=1&bb=0&cc=2'; ar[1]='1234567890?bb=0&aa=1&cc=2'; ar[2]='1234567890?cc=2&aa=1&bb=0'; ar[3]='1234567890?aa=1&bb=0'; ar[4]='1234567890?aa=1&cc=2&dd=3&ee=4'; ar[5]='1234567890?dd=3'; ar[6]='1234567890?ee=4'; ar[7]='1234567890?dd=3&ee=4'; ar[8]='1234567890?aa=1&bb=0&ff=5&cc=2'; ar[9]='1234567890?dd=3&ff=5&ee=4'; ar[10]='1234567890?dd=3&ee=4'; ar[11]='12347890?aa=1&bb=0&ff=5&cc=2'; ar[12]='12567890?dd=3&ff=5&ee=4'; for(var i=0, j=ar.length; i<j; i++){ document.write(ar[i],' ',fT(ar[i]),'<br/>'); } function fT(str){ if(!str)return false; if(!/1234567890/.test(str))return false; if(/ff\=5/.test(str))return false; if(!(/\?\S+?\=\S+?\&\S+?\=\S+?\&\S+?\=\S+/.test(str)||/(dd\=.|ee\=.)/.test(str)))return false; return true; }//]]></script></head><body><xmp>有个字符串匹配,范围比较复杂,是这样的:必须包含“1234567890?”,而后可能有多种关系字符串----------------------------------------------比如说,匹配与关系:1234567890?aa=1&bb=0&cc=2 -true1234567890?bb=0&aa=1&cc=2 -true1234567890?cc=2&aa=1&bb=0 -true1234567890?aa=1&bb=0 -false 少一个就算错的--------------------------------------------------------还有匹配或关系:有dd=3或者ee=4都算对1234567890?aa=1&cc=2&dd=3&ee=4 -true1234567890?dd=3 -true1234567890?ee=4 -true1234567890?dd=3&ee=4 -true---------------------------------------------------------还有匹配非关系:有ff=5都算错1234567890?aa=1&bb=0&ff=5&cc=2 -false1234567890?dd=3&ff=5&ee=4 -false------------------------------------------------------</xmp></body></html> btbtd老大:你的回复是对的,但是你把表达式分开来写了,我希望的是在一个表达式中实现所有匹配,因为这个东西不止是在js中使用,别的程序中也要用到所以能不能麻烦你再帮我想想,谢谢了谢谢了 :') <script type="text/javascript">//<![CDATA[ var ar=[]; ar[0]='1234567890?aa=1&bb=0&cc=2'; ar[1]='1234567890?bb=0&aa=1&cc=2'; ar[2]='1234567890?cc=2&aa=1&bb=0'; ar[3]='1234567890?aa=1&bb=0'; ar[4]='1234567890?aa=1&cc=2&dd=3&ee=4'; ar[5]='1234567890?dd=3'; ar[6]='1234567890?ee=4'; ar[7]='1234567890?dd=3&ee=4'; ar[8]='1234567890?aa=1&bb=0&ff=5&cc=2'; ar[9]='1234567890?dd=3&ff=5&ee=4'; ar[10]='1234567890?dd=3&ee=4'; ar[11]='12347890?aa=1&bb=0&ff=5&cc=2'; ar[12]='12567890?dd=3&ff=5&ee=4'; for(var i=0, j=ar.length; i<j; i++){ document.write(ar[i],' ',fT(ar[i]),'<br/>'); } function fT(str){ return ((/1234567890\?\S+?\=\S+?\&\S+?\=\S+?\&\S+?\=\S+/.test(str)|| (/(dd\=.|ee\=.)/.test(str)&&/1234567890\?/.test(str)))&&(!/ff\=5/.test(str)&&/1234567890\?/.test(str))); }//]]></script>PS: 虽然正则我可以写得很复杂, 不过一看就晕, 自己看到都晕的东西肯定不会是好东西... 一个正则也可以实现,只是比较麻烦,既然其他地方可以支持正则,为什么不能也拆开和JS的一样。其实写成一个不一定就好,很多语言的正则之间还是有细微的差别的,不一定JS的能用其他的就一定能用 <script type="text/javascript">var ar = [];ar[0]='1234567890?aa=1&bb=0&cc=2';ar[1]='1234567890?bb=0&aa=1&cc=2';ar[2]='1234567890?cc=2&aa=1&bb=0';ar[3]='1234567890?aa=1&bb=0';ar[4]='1234567890?aa=1&cc=2&dd=3&ee=4';ar[5]='1234567890?dd=3';ar[6]='1234567890?ee=4';ar[7]='1234567890?dd=3&ee=4';ar[8]='1234567890?aa=1&bb=0&ff=5&cc=2';ar[9]='1234567890?dd=3&ff=5&ee=4';ar[10]='1234567890?dd=3&ee=4';ar[11]='1234567890?aa=1&bb=0&ff=5&cc=2';ar[12]='1234567890?dd=3&ff=5&ee=4';ar[13]='1234567890?ff=4&ee=4';ar[14]='1234567890?&ee=4';var p = /1234567890\?(?!ff=5)((&?[a-z]+=\d+(?!&ff=5))*?&?(dd=3|ee=4)(?!&ff=5)(&?[a-z]+=\d+(?!&ff=5))*|[a-z]+=\d+(?!&ff=5)&?[a-z]+=\d+(?!&ff=5)(&?[a-z]+=\d+(?!&ff=5))+)/ig;var j = ar.join(",").match(p).join("\n");alert(j);</script>没有判断ar[14]那种情况,如果那个也判断了正则会更长。。 递归调用js的问题 纯粹的菜鸟请教各位前辈几个简单的的问题 求教如何提高英语 帮忙修改TAB,让他切换的时候有时间间隔 js 提交后不能自动关闭 js两个小数计算问题 如何判断两个element的内容是否相同? 如何用脚本控制图片或者flash只出现一次 求助:输入框文本右对齐 利用JS在本地保存XML文件 立结,这样写取得单选按钮的值怎么不行? 表单客户端预览问题
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>shawl.qiu template</title>
<style type="text/css">
/* <![CDATA[ *//* ]]> */
</style>
<script type="text/javascript">
//<![CDATA[
if (navigator.appName=="Microsoft Internet Explorer") {
//最大化窗口
self.moveTo(-5,-5)
self.resizeTo(screen.availWidth +8,screen.availHeight+8)
//这个脚本定义的宽度其实比原窗口还要大那么一点.
}
//]]>
</script>
<script type="text/javascript">
//<![CDATA[
var ar=[];
ar[0]='1234567890?aa=1&bb=0&cc=2';
ar[1]='1234567890?bb=0&aa=1&cc=2';
ar[2]='1234567890?cc=2&aa=1&bb=0';
ar[3]='1234567890?aa=1&bb=0';
ar[4]='1234567890?aa=1&cc=2&dd=3&ee=4';
ar[5]='1234567890?dd=3';
ar[6]='1234567890?ee=4';
ar[7]='1234567890?dd=3&ee=4';
ar[8]='1234567890?aa=1&bb=0&ff=5&cc=2';
ar[9]='1234567890?dd=3&ff=5&ee=4';
ar[10]='1234567890?dd=3&ee=4';
ar[11]='12347890?aa=1&bb=0&ff=5&cc=2';
ar[12]='12567890?dd=3&ff=5&ee=4';
for(var i=0, j=ar.length; i<j; i++){
document.write(ar[i],' ',fT(ar[i]),'<br/>');
}
function fT(str){
if(!str)return false;
if(!/1234567890/.test(str))return false;
if(/ff\=5/.test(str))return false;
if(!(/\?\S+?\=\S+?\&\S+?\=\S+?\&\S+?\=\S+/.test(str)||/(dd\=.|ee\=.)/.test(str)))return false;
return true;
}
//]]>
</script>
</head>
<body>
<xmp>有个字符串匹配,范围比较复杂,是这样的:必须包含“1234567890?”,而后可能有多种关系字符串----------------------------------------------
比如说,匹配与关系:1234567890?aa=1&bb=0&cc=2 -true
1234567890?bb=0&aa=1&cc=2 -true
1234567890?cc=2&aa=1&bb=0 -true
1234567890?aa=1&bb=0 -false 少一个就算错的--------------------------------------------------------
还有匹配或关系:
有dd=3或者ee=4都算对
1234567890?aa=1&cc=2&dd=3&ee=4 -true
1234567890?dd=3 -true
1234567890?ee=4 -true
1234567890?dd=3&ee=4 -true---------------------------------------------------------
还有匹配非关系:
有ff=5都算错
1234567890?aa=1&bb=0&ff=5&cc=2 -false
1234567890?dd=3&ff=5&ee=4 -false------------------------------------------------------</xmp>
</body>
</html>
你的回复是对的,但是你把表达式分开来写了,我希望的是在一个表达式中实现所有匹配,因为这个东西不止是在js中使用,别的程序中也要用到
所以能不能麻烦你再帮我想想,谢谢了谢谢了 :')
//<![CDATA[
var ar=[];
ar[0]='1234567890?aa=1&bb=0&cc=2';
ar[1]='1234567890?bb=0&aa=1&cc=2';
ar[2]='1234567890?cc=2&aa=1&bb=0';
ar[3]='1234567890?aa=1&bb=0';
ar[4]='1234567890?aa=1&cc=2&dd=3&ee=4';
ar[5]='1234567890?dd=3';
ar[6]='1234567890?ee=4';
ar[7]='1234567890?dd=3&ee=4';
ar[8]='1234567890?aa=1&bb=0&ff=5&cc=2';
ar[9]='1234567890?dd=3&ff=5&ee=4';
ar[10]='1234567890?dd=3&ee=4';
ar[11]='12347890?aa=1&bb=0&ff=5&cc=2';
ar[12]='12567890?dd=3&ff=5&ee=4';
for(var i=0, j=ar.length; i<j; i++){
document.write(ar[i],' ',fT(ar[i]),'<br/>');
}
function fT(str){
return ((/1234567890\?\S+?\=\S+?\&\S+?\=\S+?\&\S+?\=\S+/.test(str)||
(/(dd\=.|ee\=.)/.test(str)&&/1234567890\?/.test(str)))&&(!/ff\=5/.test(str)&&/1234567890\?/.test(str)));
}
//]]>
</script>PS: 虽然正则我可以写得很复杂, 不过一看就晕, 自己看到都晕的东西肯定不会是好东西...
var ar = [];
ar[0]='1234567890?aa=1&bb=0&cc=2';
ar[1]='1234567890?bb=0&aa=1&cc=2';
ar[2]='1234567890?cc=2&aa=1&bb=0';
ar[3]='1234567890?aa=1&bb=0';
ar[4]='1234567890?aa=1&cc=2&dd=3&ee=4';
ar[5]='1234567890?dd=3';
ar[6]='1234567890?ee=4';
ar[7]='1234567890?dd=3&ee=4';
ar[8]='1234567890?aa=1&bb=0&ff=5&cc=2';
ar[9]='1234567890?dd=3&ff=5&ee=4';
ar[10]='1234567890?dd=3&ee=4';
ar[11]='1234567890?aa=1&bb=0&ff=5&cc=2';
ar[12]='1234567890?dd=3&ff=5&ee=4';
ar[13]='1234567890?ff=4&ee=4';
ar[14]='1234567890?&ee=4';
var p = /1234567890\?(?!ff=5)((&?[a-z]+=\d+(?!&ff=5))*?&?(dd=3|ee=4)(?!&ff=5)(&?[a-z]+=\d+(?!&ff=5))*|[a-z]+=\d+(?!&ff=5)&?[a-z]+=\d+(?!&ff=5)(&?[a-z]+=\d+(?!&ff=5))+)/ig;
var j = ar.join(",").match(p).join("\n");
alert(j);
</script>
没有判断ar[14]那种情况,如果那个也判断了正则会更长。。