js获取字符串中 自定义长度和满足自定义规则的字符

egg_server 2014-04-15 10:49:58
ID号:11111111111111111 密码:000000000000000002 时间:2014-1-1
ID号:11111111111111113 密码:000000000000000003 时间:2014-1-1
ID号:11111111111111114 密码:000000000000000004 时间:2014-1-1
ID号:YD111111111111110 密码:000000000000000005 时间:2014-1-1

上面的字符串中 ID号长度为17 密码长度为18
列如变量 stru 等于上面的字符串
var strid= stru.match(/\d{17}/g);
var strpwd= stru.match(/\d{18}/g);

需要strid获取字符串中所有17位纯数字或者带有字母的,strpwd获取所有18位纯数字
现在问题stru.match(/\d{17}/g)将会把密码的18位也抽取出前面的17为数字,这样取出的数据就乱了

我需要strid只取出长度必须是17位 纯数字 或者 字母+数字 如果大于17位长度的不要截取

执行后想要的结果为:
strid="11111111111111111,11111111111111113,11111111111111114,YD111111111111110"
strpwd="000000000000000002,000000000000000003,000000000000000004,000000000000000005";
...全文
267 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
张运领 2014-04-15
  • 打赏
  • 举报
回复
var stru = "ID号:11111111111111111 密码:000000000000000002 时间:2014-1-1ID号:11111111111111113 密码:000000000000000003 时间:2014-1-1ID号:11111111111111114 密码:000000000000000004 时间:2014-1-1ID号:YD111111111111110 密码:000000000000000005 时间:2014-1-1";

var reg1 = /[^\da-zA-Z]([\da-zA-Z]{17})[^\da-zA-Z]/g,
	reg2 = /[^\d](\d{18})[^\d]/g,
	strid= stru.match(reg1).join(",").replace(reg1,"$1"),
	strpwd= stru.match(reg2).join(",").replace(reg2,"$1");
	//之所以要用replace处理一下,是因为前面匹配出来的数据,前后都会有一个额外的数据
console.log(strid);
console.log(strpwd);
按照字符串来处理的stru
嘻哈大咖秀 2014-04-15
  • 打赏
  • 举报
回复

<html>
<head></head>
<body>

<script type="text/javascript">
var strid = strpwd = '' ;
var str = "ID号:11111111111111111 密码:000000000000000002 时间:2014-1-1"+
"ID号:11111111111111113 密码:000000000000000003 时间:2014-1-1"+
"ID号:11111111111111114 密码:000000000000000004 时间:2014-1-1"+
"ID号:YD111111111111110 密码:000000000000000005 时间:2014-1-1";

var regexp = new RegExp("(?:ID号\:)([A-Za-z0-9]{17})",'g');
while((result = regexp.exec(str)) != null){
strid += result[1]+"," ;
}
alert(strid);

//密码获取同上 var regexp = new RegExp("(?:密码\:)([A-Za-z0-9]{17})",'g');
</script>
</body>
</html>


张运领 2014-04-15
  • 打赏
  • 举报
回复
egg_server 2014-04-15
  • 打赏
  • 举报
回复
引用 10 楼 zyl_lyr1019 的回复:
。。。。你是不是没有测试就把这个问题提出来了。。。。 使用textarea也是没有问题的啊,换行符也是符号的。。。。 我在IE和Chrome都测试了下,使用5#的正则,可以获取到正确的答案啊。。 你测试有问题?
我晕死 实在不好意思 我研究半天了 原来我在某一次测试中把第二个数组输出注释掉了 刚才看见你的这个疑问 我再去检查了一篇发现我给注释掉了 我注意力就完全集中在正则表达式上面了 谢谢了 非常感谢 解决了一个很麻烦的问题
张运领 2014-04-15
  • 打赏
  • 举报
回复
。。。。你是不是没有测试就把这个问题提出来了。。。。 使用textarea也是没有问题的啊,换行符也是符号的。。。。 我在IE和Chrome都测试了下,使用5#的正则,可以获取到正确的答案啊。。 你测试有问题?
egg_server 2014-04-15
  • 打赏
  • 举报
回复
最好是有正则能直接处理掉的 不然的话只能在使用您给的方式之前再处理一次将所有的换行符 替换为空格
egg_server 2014-04-15
  • 打赏
  • 举报
回复
引用 7 楼 zyl_lyr1019 的回复:
你说的这种可能性,只出现在页面中,如果是传过来的数据,肯定不会是这样的吧。 上面的正则依然可以处理啊,比如你看下面这个结构:
<p id = "a">
	11111111111111111<br />
	000000000000000002<br />
	11111111111111113<br />
	000000000000000003
</p>
这里不管是不是加上<br />进行换行。 上面的正则都能处理的。
var stru = document.getElementById("a").innerHTML;
这样获取值。 应该没有问题吧?我测试时可以的。 不管怎么说呢,这个正则只要前后有非数字,都能正常匹配,如果是数字就不行了。当然,按你的意思,结构是这样的,那肯定会有非数字作为分隔的。所以后面的正则都可以处理的,至少我想不到哪种情况,是不能处理的。
数据是在textarea控件中获取的 数据之间会有/n换行,但没有任何字符和空格这种情况
张运领 2014-04-15
  • 打赏
  • 举报
回复
你说的这种可能性,只出现在页面中,如果是传过来的数据,肯定不会是这样的吧。 上面的正则依然可以处理啊,比如你看下面这个结构:
<p id = "a">
	11111111111111111<br />
	000000000000000002<br />
	11111111111111113<br />
	000000000000000003
</p>
这里不管是不是加上<br />进行换行。 上面的正则都能处理的。
var stru = document.getElementById("a").innerHTML;
这样获取值。 应该没有问题吧?我测试时可以的。 不管怎么说呢,这个正则只要前后有非数字,都能正常匹配,如果是数字就不行了。当然,按你的意思,结构是这样的,那肯定会有非数字作为分隔的。所以后面的正则都可以处理的,至少我想不到哪种情况,是不能处理的。
egg_server 2014-04-15
  • 打赏
  • 举报
回复
引用 5 楼 zyl_lyr1019 的回复:
可以啊,这样只是说添加一个匹配开头或者结尾的就可以了。 但是你这里两行直接的字符串,必须要有间隔的,不管是空格或者是换行什么的。 像你第4,5中的测试用例,这里写成的是换行,如果我当成字符串的话,换行的地方,不能连在一起的。
var stru = "11111111111111111 000000000000000002 11111111111111113 000000000000000003";

var reg1 = /(?:[^\da-zA-Z]|^)([\da-zA-Z]{17})(?:[^\da-zA-Z]|$)/g,
	reg2 = /(?:[^\d]|^)(\d{18})(?:[^\d]|$)/g,
	strid= stru.match(reg1).join(",").replace(reg1,"$1"),
	strpwd= stru.match(reg2).join(",").replace(reg2,"$1");
	//之所以要用replace处理一下,是因为前面匹配出来的数据,前后都会有一个额外的数据
console.log(strid);
console.log(strpwd);
比如,我使用的最后一个的例子,当中是加了一个空格的。
stru = "11111111111111111 00000000000000000211111111111111113 000000000000000003";
如果不使用空格的话,是不对的。 所以你自己注意下吧, 重写后的正则在第一段代码中,试试看...
这个我明白了 还有一种可能 11111111111111111 000000000000000002 11111111111111113 000000000000000003 这种情况 每一行数据换行 后面没有空格和任何字符 只有换行 这种怎么运用到正则里边
张运领 2014-04-15
  • 打赏
  • 举报
回复
可以啊,这样只是说添加一个匹配开头或者结尾的就可以了。 但是你这里两行直接的字符串,必须要有间隔的,不管是空格或者是换行什么的。 像你第4,5中的测试用例,这里写成的是换行,如果我当成字符串的话,换行的地方,不能连在一起的。
var stru = "11111111111111111 000000000000000002 11111111111111113 000000000000000003";

var reg1 = /(?:[^\da-zA-Z]|^)([\da-zA-Z]{17})(?:[^\da-zA-Z]|$)/g,
	reg2 = /(?:[^\d]|^)(\d{18})(?:[^\d]|$)/g,
	strid= stru.match(reg1).join(",").replace(reg1,"$1"),
	strpwd= stru.match(reg2).join(",").replace(reg2,"$1");
	//之所以要用replace处理一下,是因为前面匹配出来的数据,前后都会有一个额外的数据
console.log(strid);
console.log(strpwd);
比如,我使用的最后一个的例子,当中是加了一个空格的。
stru = "11111111111111111 00000000000000000211111111111111113 000000000000000003";
如果不使用空格的话,是不对的。 所以你自己注意下吧, 重写后的正则在第一段代码中,试试看...
egg_server 2014-04-15
  • 打赏
  • 举报
回复
引用 2 楼 zyl_lyr1019 的回复:
var stru = "ID号:11111111111111111 密码:000000000000000002 时间:2014-1-1ID号:11111111111111113 密码:000000000000000003 时间:2014-1-1ID号:11111111111111114 密码:000000000000000004 时间:2014-1-1ID号:YD111111111111110 密码:000000000000000005 时间:2014-1-1";

var reg1 = /[^\da-zA-Z]([\da-zA-Z]{17})[^\da-zA-Z]/g,
	reg2 = /[^\d](\d{18})[^\d]/g,
	strid= stru.match(reg1).join(",").replace(reg1,"$1"),
	strpwd= stru.match(reg2).join(",").replace(reg2,"$1");
	//之所以要用replace处理一下,是因为前面匹配出来的数据,前后都会有一个额外的数据
console.log(strid);
console.log(strpwd);
按照字符串来处理的stru
现在有个新的问题: 格式1: ID号:11111111111111111 密码:000000000000000002 时间:2014-1-1 ID号:11111111111111113 密码:000000000000000003 时间:2014-1-1 格式2: ID号:11111111111111111 密码:000000000000000002 ID号:11111111111111113 密码:000000000000000003 格式3: ID号:11111111111111111 000000000000000002 ID号:11111111111111113 000000000000000003 格式4: 11111111111111111 密码:000000000000000002 11111111111111113 密码:000000000000000003 格式5: 11111111111111111 000000000000000002 11111111111111113 000000000000000003 等等多样化格式 但是ID号的位数 和密码 肯定是固定的 这种情况的话正则表达式能否解决呢?
egg_server 2014-04-15
  • 打赏
  • 举报
回复
引用 2 楼 zyl_lyr1019 的回复:
var stru = "ID号:11111111111111111 密码:000000000000000002 时间:2014-1-1ID号:11111111111111113 密码:000000000000000003 时间:2014-1-1ID号:11111111111111114 密码:000000000000000004 时间:2014-1-1ID号:YD111111111111110 密码:000000000000000005 时间:2014-1-1";

var reg1 = /[^\da-zA-Z]([\da-zA-Z]{17})[^\da-zA-Z]/g,
	reg2 = /[^\d](\d{18})[^\d]/g,
	strid= stru.match(reg1).join(",").replace(reg1,"$1"),
	strpwd= stru.match(reg2).join(",").replace(reg2,"$1");
	//之所以要用replace处理一下,是因为前面匹配出来的数据,前后都会有一个额外的数据
console.log(strid);
console.log(strpwd);
按照字符串来处理的stru
这种方式好 因为我得到的串是没有固定格式的 我只知道 我要获取的数据格式,“ ID号:”这种文字 不是固定的 每个人写的都不一样

87,910

社区成员

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

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