【问题标题】:How to to search a sentences and replace based on specific conditions?如何根据特定条件搜索句子并替换?
【发布时间】:2020-08-17 14:31:42
【问题描述】:

我的意思是指针_# _有针对性的句子_# 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);
});

我的解决方案只删除存在于stringVal 中的first pointer

注意:stringVal是动态的,可以改变,所以只考虑条件,searchSentence可能包含one or more pointers,所以都应该去掉。

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

【问题讨论】:

  • 我不确定我是否在关注。 “指针”在哪里确定?
  • @JoelHager 感谢您的评论,stringVal 中已经存在指针,并且还保持在中间 stringVal 是动态的,我的意思是可以不同但条件相同。
  • 我的意思是,'指针'总是_#thepointer_
  • @JoelHager,是的,它始终是 _#thepointer_,但请记住 thepointer 是一些用于搜索的词。
  • 使用我附加的repl。它运行良好。见here。可以直接在那里运行。运行sample

标签: javascript node.js regex reactjs


【解决方案1】:

不错,我觉得应该可以。

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)

【讨论】:

  • 非常感谢兄弟,现在有逗号的时候,例如:searchSentence = "people, kind people"searchSentence = "kind people, kind" 不起作用。
  • 以及如果searchSentence = "kind m" 不起作用,但kind man 可以,或者kind peo 不起作用但kind people 可以
  • 因为有时半个单词也可以选择。
  • 据我所知,这是通过所有边缘情况的最佳答案之一。它是有价值的解决方案之一。不是吗?为这个答案 +1
  • 谢谢兄弟,是的,它非常接近,如果你有时间请纠正,kind mkind peo,或kind ma类似的东西
【解决方案2】:

您可以尝试以下解决方案。注意 kind 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(/\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)

【讨论】:

  • 谢谢兄弟,您的解决方案仅在某些情况下有效。例如var stringVal = "being _#kind_, I am a _#kind_ _#man_, I love _#kind_ people, _#kind_ people is very great"; 现在如果搜索新词例如:var searchSentence = "kind people";这次不行,你可以看到我搜索了kind people,所以最后有两个kind people,它们都有pointers,所以它们的指针都应该被删除。
  • 根据您的要求更新了正则表达式@Muhammad。我认为searchSentence 中的每个单词都包含指针。修复很容易。在指针上应用? 量词 0 或 1。只是一个小建议;您应该始终在任何online regex compiler 上创建测试用例。因此,回答者很容易尝试边缘情况并创建适合您要求的正则表达式。它对 Op 和 anwer 给予者都有帮助。
  • 谢谢兄弟,我用了你的更新,我从I am a _#kind_ _#man_, I love _#kind_ people, _#kind_ people is very great搜索了kind people is。结果是:I am a _#kind_ _#man_, I love kind people, kind people is very great。在这里你可以kind people is 存在于最后,但你的解决方案从中间... love kind people, .. 中删除了pointers,这也是意料之中的。
  • 请给出您认为可能成功和失败的所有边缘情况
  • 请看我的questionImportant,直到你知道答案是什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-20
  • 2016-05-25
  • 2021-02-05
  • 1970-01-01
  • 2017-03-24
  • 2015-02-15
  • 1970-01-01
相关资源
最近更新 更多