【问题标题】:javascript replace matches after regex exec正则表达式执行后的javascript替换匹配项
【发布时间】:2014-10-16 23:21:28
【问题描述】:

我有这段文字:

<div id="myDiv">
    myText: something1
    othertext
    myText: something2
    othertext
    myText: something3
    ....
<div>

我只匹配字符串后面的文本:myText: 多行 使用这个js:

var myDivText = document.getElementById('myDiv').innerHTML;
var r = /myText:\s*([A-Za-z0-9-]+)/gim;
var m;
while ((m = r.exec(myDivText)) != null){
    console.log(m[1]);
}

正确输出:something1something2something3

现在我需要将这些匹配项替换为单词"ReplacedWord"

我该怎么做?

【问题讨论】:

  • 你试过.replace()吗?如果是这样,你尝试了什么,你在哪里卡住了?如果您还没有尝试过,那就应该使用它。

标签: javascript regex replace exec


【解决方案1】:

您可以直接在原始字符串上使用.replace()

var myDivText = document.getElementById('myDiv').innerHTML;
var temp = myDivText.replace(/(myText:\s*)([A-Za-z0-9-]+)/gim, "$1ReplacedWord")
console.log(temp);

工作演示:http://jsfiddle.net/jfriend00/Lbhxudv2/

说明:我在正则表达式的开头添加了一个新组,以捕获您不想替换的匹配部分。然后,替换字符串是“$1ReplacedWord”,它将第一个匹配部分添加回替换中。

【讨论】:

  • 那么这是一种 javascript lookbehind 吗?
  • @user3542686 - 从技术上讲,这不是向后看。它匹配整个事物,然后用匹配的第一部分加上一个新部分替换整个事物。这是一种常见的技术。
【解决方案2】:

我会推荐replace() 函数。

如果您已经尝试过,但没有成功,您的结果是什么?

例如,在你的 while 语句中,你可以调用:

myDivText.replace(m[1], "ReplacedWord");

myDivText.replace(m[1], m[1]+"_Replaced");

【讨论】:

  • 是的,replace() 是正确的工具,但您应该使用它而不是 exec(),而不是除了它之外。有关正确方法,请参阅jfriend00's answer
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 2012-05-16
  • 2014-07-13
  • 1970-01-01
  • 2022-11-29
  • 1970-01-01
相关资源
最近更新 更多