javascript怎么按照关键字分解字符串

例如有如下一行字,关键字为 渐

let str='渐行渐远渐无书'

用split 的话得到的结果没有了 渐

str.split('渐')//[行,远,无书]

怎样分割为 [渐,行,渐,远,渐,无,书] 这种形式呢?

阅读 4.2k
6 个回答
(function cut(str,key) {
        let arrResult = []
        let arr = str.split(key)
        arr.forEach(e=>{e === '' ? arrResult.push(key) : arrResult.push(key,e)})
        arrResult.shift()
        return arrResult
    })("渐行渐远渐无书","渐")

大概就这样,应该没有直接的办法可以实现那个效果,不过可以先用split分割完然后把被分割地方填充回去,也挺简单的
PS:用正则可以一行实现,不过我比较菜,写了好长还有bug,就放弃了……

整合之后完整代码:

Array.prototype.filterx = Array.prototype.filterx || function(func) {
var arr = this;
var r = [];
for (var i = 0; i < arr.length; i++) {
    if (func(arr[i])) {
        r.push(arr[i]);
    }
}
return r;
}

const split_text = (text, keyName) => {
if(!text) return [];
    const array = text.replace(new RegExp(keyName || '', 'g'), '_' + (keyName || '') +'_' ).split('_');
    const newArray = array.filterx(function(item) {
        return item!='';
});
return newArray;
}
const text = '渐行渐远渐渐尖书渐渐';
console.log(split_text(text, '渐'));

var str = '我们中国的钓鱼岛自过以来就是中国的领土'
var s = '中国'
str.replace(new RegExp(s,"g"), '_' + s + s + '_' + s).split('_' + s).filter(x => x)

//
    var str='aba';
    var arr=[];
    console.log(str.split(''))//[a,b,a];
    //
    for(var i = 0 ; i < str.length; i++){
        arr.push(str[i])
    }
    console.log(arr);//[a,b,a]
Array.prototype.join.call('渐行渐远渐无书',',').split(',')
  '渐行渐远渐无书'.replace(/(渐)/g,",$1,").split(',').filter( x=>x)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题