【问题标题】:Regexp replace all exact matching words/characters in string正则表达式替换字符串中所有完全匹配的单词/字符
【发布时间】:2017-08-28 15:46:53
【问题描述】:

我需要替换字符串中所有匹配的单词或特殊字符,但无法找到这样做的方法。

例如我有一个字符串:"This - is a great victory"

我需要用+ 符号替换所有-。或greatunpleasant - 用户选择要替换的单词并对其进行替换。

"\\b"+originalTex+"\\b" 

一直在工作,直到我意识到 \b 确实只适用于单词字符。

所以问题是:用什么替换 \b 可以让我替换任何用空格括起来的匹配词?

编辑:我不能删除单词边界,因为它会导致不精确的匹配。例如:你是你的世界的创造者,在改变你的同时,你的也随之改变。因为它包含“你”

【问题讨论】:

  • 如果链接的问题对您没有帮助,请编辑您的问题以描述您的问题有何不同。请注意,现在您的问题是单词边界,删除它们可以获得所需的行为。
  • 我已经编辑了答案。由于需要完全匹配,因此无法删除单词边界
  • 好的,但是你没有解释你要搜索的词是什么。从语言学的角度来看,- 不是一个词。您在这里对“词”的定义是什么?
  • 字符串开头或结尾的任何字符(或序列)都被空格包围。我已经通过前瞻完成了一半的任务,但似乎 javascript 中缺少后向。

标签: javascript regex


【解决方案1】:

您需要使用以下代码:

var s  = "you are creator of your world";
var search = "you";
var torepl = "we";
var rx = new RegExp("(^|\\s)" + search.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + "(?!\\S)", "gi");
var res = s.replace(rx, "$1" + torepl);
console.log(res);

(^|\\s) 将匹配并捕获到第 1 组字符串或空格的开头。 search.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') 将转义搜索词中的特殊字符(如果有)。 (?!\\S) 前瞻将要求紧跟在搜索词之后的空格或字符串结尾。

$1 反向引用在替换期间将第 1 组的内容插入回字符串中(此处无需使用任何后视)。

【讨论】:

    【解决方案2】:

    两个替换怎么样

    var txt = "This - is a great, great - and great victory"
    var originalTex1 = "great",originalTex2 = "-",
    re1 = new RegExp("\\b"+originalTex1+"\\b","g"), 
    re2 = new RegExp("\\s"+originalTex2+"\\s","g") 
    
    console.log(txt.replace(re1,"super").replace(re2," + "))

    【讨论】:

    • 这几乎可以工作。问题是 \\s 在前面包含空格,所以如果符号被替换,那么它将与前面的字符串连接。
    • 这实际上是解决我的问题的好主意。我有类似console.log(5) 的东西,但不知道如何在and a person in a room 中匹配a 之类的任何其他词。据我了解,下一个替换充当故障保险,以防前一个替换什么都不做。谢谢,点赞:)
    猜你喜欢
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多