首页 > 解决方案 > 将字符串处理成使用数组分隔的单词

问题描述

嗨所以我在Javascript中有一个问题,是否可以使用给定的数组,例如

["old", "great", "other", "long", "good", "last"]

如果你有一个

var str = "oldgreatotherlonggoodlastfirstnewownlittle"

并使用数组和正则表达式用空格打印它?

例如。

old great other long good lastfirstnewownlittle

我只是在 javascript 中做一个简单的网络应用程序,只是为了练习。

标签: javascript

解决方案


您可以在数组上使用Array.join()生成正则表达式,然后将其与String.replace()一起使用。在下一个示例中,我使用了replace 的替换功能,它在某些情况下为替换逻辑提供了更多控制。但是您可以避免它并使用@Barmar回答。

let arr = ["old", "great", "other", "long", "good", "last"];
var str = "oldgreatotherlonggoodlastfirstnewownlittle";

let re = new RegExp(arr.join("|"), "g");
let out = str.replace(re, (m) => m + " ");
console.log(out);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

但是,请注意,以前的方法仅在某些特定情况下有效,但例如,对于var str = "oldotherlonglastfirstnewgoodownlittlegreat";. 然后,更通用的方法是:

let arr = ["old", "great", "other", "long", "good", "last"];
var str1 = "oldotherlonglastfirstnewgoodownlittlegreat";
var str2 = "oldgreatotherlonggoodlastfirstnewownlittle"

const separateMatches = (str, arr) =>
{
    let re = new RegExp(arr.join("|"), "g");
    let out = str.replace(re, (m) => ` ${m} `);
    return out.replace(/\s+/g, " ").trim();
}

console.log(separateMatches(str1, arr));
console.log(separateMatches(str2, arr));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}


推荐阅读