Как искать предложения и заменять их в зависимости от условий c? - PullRequest
2 голосов
/ 03 мая 2020

Я имею в виду для указатель : _# _, а для остроконечное предложение : _# some dynamic words _.

Я хочу найти sentence.

  1. if (sentence contained pointer) затем remove pointer.
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(/\b\s+/).forEach(item => {
    stringVal = stringVal.replace(`_#${item}_`, item);
});

мое решение удалить только first pointer существует в stringVal.

Примечание: stringVal является динамическим c и может быть изменено, поэтому следует учитывать только условия, а также searchSentence может содержать one or more pointers, поэтому все они должны быть удалены.

Важно : значение переменной searchSentence должно найти ее точное совпадение в значении stringVal, затем, если в ней есть какой-либо указатель, их следует удалить.

Ответы [ 2 ]

3 голосов
/ 03 мая 2020

Хороший, я думаю, он должен это сделать.

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(/\b\s+/).map(s => `_#${s}_`).join('|'), 'g'), m => m.substr(2, m.length - 3)) : item)
  .join(' ').replace(/ ,/g, ',')

console.log(result)
2 голосов
/ 03 мая 2020

Вы можете попробовать решение ниже. Обратите внимание на оба случая доброго образца 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(/\b\s+/).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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...