#101 解析字串


  • 1

    用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;
    }
    

  • 1

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

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


  • 2

    const extractStr = (str) => /* TODO */
    {
    var strArr = str.split('.');
    var temp = [];
    if(strArr.length > 1){
    strArr[strArr.length-1] = '';
    for(var key in strArr){
    var num = strArr[key].lastIndexOf(':');
    if(num>=0){
    temp.push(strArr[key].substring(num+1))
    }
    }
    }
    return temp;
    }


  • 0

    const extractStr = (str) =>{
    var reg = /:[^:.]*./g
    var results = str.match(reg)
    if(!results){
    return []
    }
    else {
    for (let i = 0; i < results.length; i++) {
    results[i] = results[i].substr(1, results[i].length - 2)
    }
    }
    return results
    }


  • 0

    @linqiang 正则化也可以用,第一次写js,哈哈


  • 0

    str.match(/:([^:^.]*)./g).join('--').replace(/[:.]/g,'').split('--')


  • 0

    const extractStr = (str) => {
      let reg = /\:([^\.\:]*)\./g;
      let matchArr = str.match(reg) === null ? [] : str.match(reg) ;
      let result = matchArr.map((el) => {
        return el.slice(1, -1);
      });
      return result;
    }
    

  • 0

    尴尬,正则写了半天不对,最后花3分钟用C语言写法强写居然过了。
    const extractStr = (str) => {
    var result = [];
    var tmp = "";
    var state = 0;
    var i = 0;
    for (i = 0; i < str.length; i++) {
    var curChar = str[i];
    if (curChar == ':') {
    state = 1;
    tmp = "";
    }
    else if (curChar == '.') {
    if (state == 1) {
    result.push(tmp)
    state = 0;
    tmp = "";
    }
    } else {
    if (state == 1) {
    tmp += curChar;
    }
    }
    }

    return result;
    }


  • 0

    const extractStr = (str) => {
      const reg = /:([^\.:]*)\./g;
      const res = [];
      let regRes = null;
      while (regRes = reg.exec(str)) {
        res.push(regRes[1])
      }
      return res;
    }
    

  • 0

    @meltifa 我猜你那个反向断言太屌,那个判定规则识别不了,mdn上的正则文档里是没有反向断言的,虽然我比较欣赏你的写法,我就是不知道怎么反向取边界又不包括边界,但是我还是不敢用 这种反向断言


  • 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;
     }

登录后回复
 

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