有谁知道js怎么从一个数组中截取一段连续的32数字的解决办法

SunHacker 发布于 2018/09/06 00:17
阅读 555
收藏 0

【DevOps必读】产品经理与程序员之间如何破局?>>>

有谁知道js怎么从一个数组中截取一段连续的32数字的解决办法,

加载中
0
火眼金睛容嬷嬷
火眼金睛容嬷嬷

看不懂,给个用例

0
SunHacker
SunHacker

就是从“security_msg=%E6%82%A8%E6%9F%A5%E8%AF%A2%E7%9A%84%E4%BA%A7%E5%93%81%E6%98%AF%E6%83%A0%E5%B7%9E%E5%B8%82%E9%93%B6%E5%86%9C%E7%A7%91%E6%8A%80%E8%82%A1%E4%BB%BD%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8%E7%94%9F%E4%BA%A7%E7%9A%84%E7%B3%BB%E5%88%97%E4%BA%A7%E5%93%81%2C%E8%AF%B7%E6%94%BE%E5%BF%83%E4%BD%BF%E7%94%A8%EF%BC%81&product_flow=%E4%BA%91%E5%8D%97%E5%86%9C%E5%8F%8B%E5%86%9C%E8%B5%84%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8&product_name=%E9%93%B6%E9%94%90%E3%80%9010g%E3%80%91&product_spec=10g*50%E8%A2%8B*10%E7%9B%92%2F%E7%AE%B1&brand=%E9%93%B6%E5%86%9C%E7%A7%91%E6%8A%80&winsafe_product_id=004002&security_code=11012131102120180940290907087680&produce_enterprise=%E6%83%A0%E5%B7%9E%E5%B8%82%E9%93%B6%E5%86%9C%E7%A7%91%E6%8A%80%E8%82%A1%E4%BB%BD%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8&produce_date=2018-05-02&first_query_time=2018-09-05+16%3A50%3A41&query_times=6“这串字符串里把“11012131102120180940290907087680”识别提取出来

0
红薯官方
红薯官方

如何解析 QueryString?怎么做,怎么才能拿到特定的参数和值:

var string = "security_msg=%E6%82%A8%E6%9F%A5%E8%AF%A2%E7%9A%84%E4%BA%A7%E5%93%81%E6%98%AF%E6%83%A0%E5%B7%9E%E5%B8%82%E9%93%B6%E5%86%9C%E7%A7%91%E6%8A%80%E8%82%A1%E4%BB%BD%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8%E7%94%9F%E4%BA%A7%E7%9A%84%E7%B3%BB%E5%88%97%E4%BA%A7%E5%93%81%2C%E8%AF%B7%E6%94%BE%E5%BF%83%E4%BD%BF%E7%94%A8%EF%BC%81&product_flow=%E4%BA%91%E5%8D%97%E5%86%9C%E5%8F%8B%E5%86%9C%E8%B5%84%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8&product_name=%E9%93%B6%E9%94%90%E3%80%9010g%E3%80%91&product_spec=10g*50%E8%A2%8B*10%E7%9B%92%2F%E7%AE%B1&brand=%E9%93%B6%E5%86%9C%E7%A7%91%E6%8A%80&winsafe_product_id=004002&security_code=11012131102120180940290907087680&produce_enterprise=%E6%83%A0%E5%B7%9E%E5%B8%82%E9%93%B6%E5%86%9C%E7%A7%91%E6%8A%80%E8%82%A1%E4%BB%BD%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8&produce_date=2018-05-02&first_query_time=2018-09-05+16%3A50%3A41&query_times=6";
var array = string.split('&');
var map = {};
for(var i=0;i<array.length;i++) {
	var parts = array[i].split('=');
    map[decodeURIComponent(parts[0])] = parts.length > 1 ? decodeURIComponent(parts[1]) : null;
}
console.debug(map['security_code']); // OK

更多DEBUG:

// debug
console.debug(map['security_code']);
console.debug(map['first_query_time']);
console.debug(map['query_times']);
// 输出
VM524:8 11012131102120180940290907087680
VM524:9 2018-09-05+16:50:41
VM524:10 6

 

红薯官方
红薯官方
startsWith 效率更快,不用像正则表达式那样需要编译、做模式匹配,它可能仅仅是一个循坏匹配字符序列。
红薯官方
红薯官方
比如'api/316484184841848'.startsWith('api/') 控制台输出 true
红薯官方
红薯官方
回复 @SunHacker : 这种情况呢,可以用字符串startWith判断一下数据格式,然后再调用适当的解析函数去做数据解析,最后统一一个返回值给业务做处理。流程:数据->数据格式判断->适配数据解析->返回解析结果->业务处理。
SunHacker
SunHacker
回复 @蓝水晶飞机 : 谢谢你
SunHacker
SunHacker
回复 @蓝水晶飞机 : 有的时候字符串又是“api/31600791148201712075092724773400?nsukey=nrmBjyj1SVxXBfvIZId9t01jCPMCN%2FVBxaW1R3cvW4N6Nr4V5cPN9Aka2TrR%2FLbdFLHEVEu35NJr2Lff59k5cGew443J7hileoE0Dbm4gHn”这样的,也就是说这串字符串没有固定格
下一页
0
b
bydy

你这个是encodeURLcomponent转码了,所以先解码再取对应的字段就好了。
1.把上面那串字符串decodeURLComponent之后会得到下面这个字符串:let str = "security_msg=您查询的产品是惠州市银农科技股份有限公司生产的系列产品,请放心使用!&product_flow=云南农友农资有限公司&product_name=银锐【10g】&product_spec=10g*50袋*10盒/箱&brand=银农科技&winsafe_product_id=004002&security_code=11012131102120180940290907087680&produce_enterprise=惠州市银农科技股份有限公司&produce_date=2018-05-02&first_query_time=2018-09-05+16:50:41&query_times=6"
2.定义个函数
let urlToObj = function (url) {
          let search = url.replace(/^\s+|\s+$/, '').match(/([^?#]*)(#.*)?$/);
          if (!search) {
            return {};
          }
          let searchHash = search[1].split('&');
          let obj = {};
          for (let i = 0, len = searchHash.length; i < len; i++) {
            let pair = searchHash[i].split('=');
            if (pair[0]) {
              let key = decodeURIComponent(pair[0]);
              let value = pair[1];
              if (value !== undefined) {
                value = decodeURIComponent(value);
              }
              // 这里判断转化后的obj里面有没有重复的属性
              if (key in obj) {
                if (obj[key] !== Array) {
                  // 把属性值变为数组,将另外的属性值也存放到数组中去
                  obj[key] = [obj[key]];
                }
                obj[key].push(value);
              } else {
                obj[key] = value;
              }
            }
          }
          return obj;
        };
3.用上面定义的这个函数把let obj = urlToObj(str);

4.obj.security_code就是你要的那串数字了

SunHacker
SunHacker
谢谢你
0
tcxu
tcxu
var str = "security_msg=%E6%82%A8%E6%9F%A5%E8%AF%A2%E7%9A%84%E4%BA%A7%E5%93%81%E6%98%AF%E6%83%A0%E5%B7%9E%E5%B8%82%E9%93%B6%E5%86%9C%E7%A7%91%E6%8A%80%E8%82%A1%E4%BB%BD%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8%E7%94%9F%E4%BA%A7%E7%9A%84%E7%B3%BB%E5%88%97%E4%BA%A7%E5%93%81%2C%E8%AF%B7%E6%94%BE%E5%BF%83%E4%BD%BF%E7%94%A8%EF%BC%81&product_flow=%E4%BA%91%E5%8D%97%E5%86%9C%E5%8F%8B%E5%86%9C%E8%B5%84%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8&product_name=%E9%93%B6%E9%94%90%E3%80%9010g%E3%80%91&product_spec=10g*50%E8%A2%8B*10%E7%9B%92%2F%E7%AE%B1&brand=%E9%93%B6%E5%86%9C%E7%A7%91%E6%8A%80&winsafe_product_id=004002&security_code=11012131102120180940290907087680&produce_enterprise=%E6%83%A0%E5%B7%9E%E5%B8%82%E9%93%B6%E5%86%9C%E7%A7%91%E6%8A%80%E8%82%A1%E4%BB%BD%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8&produce_date=2018-05-02&first_query_time=2018-09-05+16%3A50%3A41&query_times=6";
var index = str.indexOf("security_code=")+"security_code=".length;
document.write(str.substring(index, index+32));

 

0
sxgkwei
sxgkwei
str.match(/\d{32}/g)
SunHacker
SunHacker
谢谢你,我已采纳
tcxu
tcxu
就此例而言, 便捷.
返回顶部
顶部