#101 解析字串


  • 0
    administrators

    完成一个 extractStr 函数,可以把一个字符串中所有的 :. 的子串解析出来并且存放到一个数组当中,例如:

    extractStr('My name is:Jerry. My age is:12.') // => ['Jerry', '12']
    

    注意,:. 之间不包含 :.。也即是说,如果 ::abc..,则返回 ['abc']

    (本题来源:《JavaScript Cookbook》)


  • 0

    @ScriptOJ 输入 :..UkUJZZfrcbDO:...QPkAMz::Lqweeu:.gAKMGk 应该输出 ["","","Lqweeu"],而你输出 ["","",""] 为啥应该输出 Lqweeu ?


  • 0
    administrators

    @Sunjourney 应该是个 bug,再试试


  • 1

    
    const extractStr = str => 
       (':.'+str)
       .match(/:([^:\.]*)(?=\.)/g)
       .splice(1)
       .map(x=>x.slice(1))
    
    

    正则断言只支持了一半是个坑,没有匹配输出null是另一个坑


  • 0

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

  • 0

    为啥连map都不支持?


  • 0

    回复: #101 解析字串

    const extractStr = (str) => {
      return str.match(/(:\w+\.)/g).map((v) => {
           return v.match(/\w+/)[0]
      })
    }
    

    我在本机上测试通过,为啥在这里不通过,提示Cannot read property 'map' of null


  • 0
    administrators

    @llj @islishude 那是因为正则写错了,如果是 str 是 '' 呢?


  • 0

    const extractStr = (str) => {
    const ret = str.match(/:([^:.])*?./g) || []
    return ret.map((subStr) => subStr.replace(/[:.]/g, ''))
    }


  • 0

    @li#101 解析字串 中说:

    const extractStr = (str) => {
    const ret = str.match(/:([^:.])*?./g) || []
    return ret.map((subStr) => subStr.replace(/[:.]/g, ''))
    }

    同学,我感觉还是将通过测试的代码发出来比较好


  • 0

    用C++/Java的思路和写法写的,居然被AC了,从来没写过JS,大神给看一哈。

    const extractStr = (str) => /* TODO */
    {
        let result = [];
        let targets = str.split(".").slice(0, -1);
        targets.forEach(target=>{
            let position = target.lastIndexOf(":");
            if( position >= 0){
                result.push(target.substring(position + 1));
            }
        });
        return result;
    }
    

  • 0

    const extractStr = (str) => {
      const reg = /(?<=:).+?(?=\.)/g;
      return str.match(reg)
    }
    

    自测可以但是网页上提示compile error


登录后回复
 

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