#101 解析字串


  • 0

    function extractStr(){
    var str='My name is:Jerry. My age is:12.My name is:Jerry. My age is:12.';
    var a=new Array();
    while(str.indexOf(":")!=-1){
    a.push(str.substring(str.indexOf(":")+1,str.indexOf(".")).replace(/ /,""))
    str=str.substr(str.indexOf(".")+1)
    a.push(str.substring(str.indexOf(":")+1,str.indexOf(".")).replace(/ /,""))
    str=str.substr(str.indexOf(".")+1)

    	 	   }
    	 	   for(var i=0;i<a.length;i++){
    	 	   	    alert(a[i])
    	 	   }
    	 	    
    	 }
    	  extractStr()

  • -1

    const extractStr = (str) => /* TODO /{
    let reg = /:(\w
    )./g
    let arr = []
    str.replace(reg,($1,$2)=>{
    arr.push($2)
    })
    return arr
    }


  • 0

    const extractStr = (str) => {
    let a = str.split(':').length;
    str = str.split('.');
    let arr = new Array;
    for (let i = 0; i <a; i++) {
    if (str[i].indexOf(':') > -1) {
    let arr1 = str[i].split(':');
    let arr2 = arr1[arr1.length - 1];
    arr.push(arr2);
    }
    }
    console.log(arr);
    return arr;
    }
    电脑上测试通过了,为什么这里会报错说“Cannot read property 'indexOf' of undefined”


  • 0

    const extractStr = (str) => {
    let strArr = str.split(":")
    let result = []
    for (var i = 1;i< strArr.length;i++){
    if(strArr[i].split(".").length > 1){
    result.push(strArr[i].split(".")[0])
    }
    }
    return result
    }


  • 1

    const extractStr = (str) => 
    {
      var reg=/:([^:.]*)\./g
      var result=[]
      while ((rs = reg.exec(str)) != null)
      {
          result.push(rs[1])
      }
      return result
    }
    

    测试通过。


  • 0

    @islishude
    str是string,严格模式下用不了map


  • 0

    const extractStr = (str) =>{
    var p = /:[^:^.]*./g;
    var res = str.match(p);
    return res.map(v => {
    v = v.split('')
    v.shift();
    v.pop();
    v = v.join('')
    return v;
    })
    }

    明明可以,却报什么null的错误。正则能通过;map也不行?
    垃圾引擎


  • 0

    @coolalpaca#101 解析字串 中说:

    /:[^:^.]*./g

    var p = /:[^\:^\.]*./g;


  • 0

    const extractStr = (str) => {
    var matchs = str.match(/:[a-zA-Z0-9]*./g);
    if(matchs && matchs.length > 0){
    return matchs.map( (d) => { return d.replace(/:|./g, '')} );
    }
    return [];
    }


  • 0

    const extractStr = (str) => /* TODO */
    {
     let arr = [];
    let str2 = str.replace(/(?:\:)(\w*)(?:\.)/g,(a,b)=>arr.push(b));
    return arr;
     }

  • 0

    var i=0
    var index=0
    var arr=[]
    while(str.indexOf(":",i)!=-1){
    index=str.indexOf(":",i)
    if (str.indexOf(".",index+1)!=-1){
    var newStr=str.substring(index+1,str.indexOf(".",index+1))
    arr.push(newStr)
    i=str.indexOf(".",index+1)+1
    }
    }
    return arr
    正则不会用,该怎么把NEWstr里面的":"和“.”过滤掉?


  • 0

    for循环为啥有问题,一直报null不能读取length,直接返回数组又没问题
    用正则取出来的包含了:.再跑循环去掉就报错


  • 0

    @jhhfft#101 解析字串 中说:

    const extractStr = (str) => {
      let result = [],
          pattern = /\:+(\w*)\.+/g,
          temp = null
      while(temp = pattern.exec(str)){
        result.push(temp[1])
      }
      return result
    }
    

  • 0

    str.match(/(?<=:)[^:\.]*(?=\.)/g)
    
    上面也是可以的...  貌似不能通过
    
    str.match(/:[^:\.]*(?=\.)/g) ? str.match(/:[^:\.]*(?=\.)/g).join('').split(':').splice(1) : []
    

  • 0

    @islishude 经测试,忽略了空字符串结果


  • 0

    const extractStr = str => str.match(/:[^(:|\.)]+\./ig)||[]).map(e => e.slice(1,-1));
    

  • 0

    const extractStr = (str) => { /* TODO */
    if (str) {
    var list = str.split(':');
    var arr = [];
    for (var i = list.length-1; i > 0; i--) {
    if (list[i].indexOf('.') != -1) {
    list[i] = list[i].split('.')[0];
    arr.push(list[i]);
    }
    }
    return arr.reverse();
    } else {
    return [];
    }
    }


  • 0

    const extractStr = (str) => {
    let reg = /:[^:.]*./g ;
    let arr = str.match(reg);
    if(!arr) return [];
    return arr.map((item)=>{
    return item.replace(/^:|.$/g,'');
    })
    }
    已通过测试~ :-D


  • 0

    @valk 啊~,现在才发现最后一个正则的$前面那个.忘记加转义了,不过还是可以将每个字符段最后那个字符.去掉,结果没问题,但是严格来说是加转义符才更准确


  • 0

    写的不好不过还是能用了

    const extractStr = (str) => {
       var re = /\:+(\w*)\.+/g, bool = true, one = "", arr = [];
    
       while (bool) {
           one = re.exec(str);
           if (one === null) {
               bool = false;
           } else {
               arr.push(one[1]);
           }
       }
    
       return arr;
    };

登录后回复
 

与 ScriptOJ 的连接断开,我们正在尝试重连,请耐心等待