如何根据特定条件搜索句子并替换



我指的是指针_# _,以及指向的句子:_# some dynamic words _

我想找一个sentence

  1. if (sentence contained pointer),然后是removepointer
const stringVal = "being _#kind_, I am a _#kind_ _#man_, I love _#kind_ people, _#kind_ people is very great";
const searchSentence = "a kind man";

提示:a kind man包含two pointer,所以我必须remove它,因为两个pointers都存在于searchSentence中,但其他pointers会活着,因为它们不在searchSentence中。

所以结果是:

stringVal = "being _#kind_, I am a kind man, I love _#kind_ people, _#kind_ people is very great";

我尝试了以下内容:

searchSentence.trim().split(/bs+/).forEach(item => {
stringVal = stringVal.replace(`_#${item}_`, item);
});

我的解决方案仅移除CCD_ 15中存在的CCD_。

注意:stringVal是动态的,可以更改,因此只应考虑条件,而且searchSentence可能包含one or more pointers,因此应删除所有条件。

重要searchSentence变量的值,应该在stringVal值中找到它的精确匹配,然后如果其中存在任何指针,则应该删除它们。

您可以尝试下面的解决方案。请注意类sample-man的两个变化。(我想这是你的要求(

//var searchSentence = "a kind sample man";
//var stringVal = "I am a _#kind_ _#sample_ _#man_, I love _#kind_ people, _#kind_ people is very great. I am also a _#kind_ _#sample_ _#man_.";
var searchSentence = "kind people is";
var stringVal = "being _#kind_, I am a _#kind_ _#man_, I love _#kind_ people, _#kind_ people is very great";
searchSentence.trim().split(/bs+/).forEach((item, index) => {
let splitSearch = searchSentence.split(" ")[index + 1];
stringVal = stringVal.replace(new RegExp(`_?#?${item}_? (?=_?#?${splitSearch}_?)`,'g'), item + " ")
stringVal = stringVal.replace(new RegExp(`(?<=${item} )_?#?${splitSearch}_?`, 'g'), splitSearch);
});
console.log(stringVal)

不错,我认为它应该做到。

var searchSentence = "kind people is"
var stringVal = "I am a _#kind_ _#man_, I love _#kind_ people, _#kind_ people is very great"
var indeces = []
var stringArray = stringVal.replace(/,/g, ' ,')
.replace(/_#[a-z]*_/ig, m => m.substr(2, m.length - 3))
.split(' ')
.forEach((item, index, all) => { 
var found = true
var tmpIndeces = []
searchSentence.split(' ').forEach((searchItem, index2) => {
found = found && all[index + index2] === searchItem
tmpIndeces.push(index + index2)
})
if (found) indeces = [...indeces, ...tmpIndeces]
})
var result = stringVal.replace(/,/g, ' ,').split(' ').map((item, index) => 
indeces.includes(index) ? item.replace(new RegExp(searchSentence.trim().split(/bs+/).map(s => `_#${s}_`).join('|'), 'g'), m => m.substr(2, m.length - 3)) : item)
.join(' ').replace(/ ,/g, ',')
console.log(result)

最新更新