【问题标题】:substring from a string and how much solution [closed]字符串中的子字符串以及多少解决方案[关闭]
【发布时间】:2019-07-20 09:34:24
【问题描述】:

比方说,我有字符串programit,我有一堆数组:

this.delimiter = ['pro','gram','merit','program','it,'programmer']

我需要输出变成['pro','gram','it','program','it']

尝试

this.name = 'programit';
this.newname = [''];
let fakeinput = this.name;
let b=0;
    for(let a=0;a<this.delimiter.length;a++){ 
        if(fakeinput.length==0){
            fakeinput=this.name;
        }
        //console.log(`console ${fakeinput}`);
        if(fakeinput.match(`^${this.delimiter[a]}`)){
            this.newname[b] = this.delimiter[a]
            fakeinput=remove_character(this.delimiter[a],fakeinput);
            b++;
        }
        for(let c=0;c<=a;c++){
            if(this.delimiter[a]!=this.delimiter[c]){
                if(fakeinput.match(`^${this.delimiter[c]}`)){
                    this.newname[b] = this.delimiter[c]
                    fakeinput=remove_character(this.delimiter[c],fakeinput);
                    b++;
                }
            }
        }
    }

返回

['pro','gram','it','pro','gram','it']

我需要让我的代码不重复第一个分隔符,所以它不会重复 'pro' 值。

另一个输入和输出是:

输入

programmerit

输出

['pro','gram','merrit','program','merrit','programmer','it']

【问题讨论】:

  • let this.name = 'programit'; 语法错误。 letthis 不能混用
  • 好吧,这只是我发帖时的错。不是我的实际代码
  • 如果您不提供实际代码,我们提供的任何答案都不会在您的实际环境中起作用。
  • 我的意思是只为let this.name
  • this.newname = this.delimiter.filter(sub=&gt;this.name.includes(sub));完成

标签: javascript regex substring


【解决方案1】:

您可以采用动态方法,通过给定的数组构建一种搜索树,并仅收集找到该单词的部分。

function getParts(array, word) {
    function iter([s, ...parts], subset) {
        if (word === subset.join('')) return result.push(subset);
        if (!s) return;
        
        var temp = [...subset, s];
        if (word.startsWith(temp.join(''))) iter(parts, temp);
        iter(parts, subset);
    }

    var result = [];
    iter(array, []);
    return result;
}

console.log(getParts(['pro', 'gram', 'merit', 'program', 'it', 'programmer'], 'programit'));
console.log(getParts(['pro', 'gram', 'merit', 'gra', 'mit', 'program', 'it', 'programmer'], 'programit'));
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 请问我在哪里可以学习这些语法。我实际上是 js 新手
  • 我的意思是这个语法[s,...parts]你太棒了
  • 嘿,再次感谢,但我在你的代码中发现,我的一些输入并没有得到我想要的输出。当我尝试输入'programmerit' 时,您的输出仅为[pro,gram,merit]。我的意思是我们仍然可以得到另一个输出,比如[program,merit] [programmer,it]。我实际上找到了解决方案,感谢您提到搜索树。
  • 我不明白你的输入是什么,有哪些部分和字符串,输出应该是什么?
【解决方案2】:

我的第一种方法是将每个字符输入匹配到我的数组分隔符,然后将匹配的字符串删除到分隔符。如果我的输入为空,则在得到remove_character() 方法之前用输入重新分配它

感谢@Nina-Scholz 提到搜索树,让我用不同的方法来做,而不是匹配我输入的每个字符,然后在上面做remove_character() 方法,为什么不使用分隔符做一堆单词然后做正则表达式匹配我的输入。如果有人寻找它,这是我的代码

function splitString(array, myInput) {
let temp ='';
let temparr=[];
let fixed=[];
let regextmp;
//let z= 0;
for(let a=0;a<array.length;a++){
    temparr=[];
    temp = '';
    temp = temp+array[a];
    //console.log(temp);
    regextmp = new RegExp("^" + temp);
    let d=0;
    if(myInput.match(regextmp)){
        //console.log(11111);
        temparr[d]=array[a];
        //console.log(temparr);
        for(let b=0;b<array.length;b++){
            if(array[b]!=array[a]){
                regextmp = new RegExp("^" +temp+array[b]);

                if(myInput.match(regextmp)){
                    d++;
                    temparr[d]=array[b];
                    temp = temp+array[b];
                }
            }
        }
        //z++;
        regextmp = new RegExp("^"+temp);
        //console.log(temparr);
        if(myInput.match(regextmp)){
            fixed.push(temparr);
        }
    }
}


console.log(fixed);

}
 const delimiter = ['pro', 'gram', 'merit', 'program', 'it', 'programmer'];
 const input = 'programmerit'; //your input here

splitString(delimiter, input);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-12
    • 2021-03-14
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 2016-06-01
    相关资源
    最近更新 更多