【问题标题】:javascript replace string after matching linejavascript在匹配行后替换字符串
【发布时间】:2018-10-26 14:52:26
【问题描述】:

我希望找到一个典型的正则表达式问题的答案。

  • 查找给定行
  • 更改该行的内容

许多关于如何使用 RegEx 替换的示例都假设您知道要替换的模式。非常适合教学,但不典型(IMO)。请参阅 w3 schoolsMDN。如果在 MDN 页面上请指出。

在我的最新问题中,我有一个 html 文件,其中一行具有 uniq ID,因此我可以执行这个简单的替换。我需要修改的行的语法如下所示。我可以在文件中放置一个唯一的字符串,以便找到要更新的正确行。

<span id="lastModified">2018-10-26</span>
<span id="builtBy">Pat</span>

我需要找到具有id="lastModified" 的行并更改日期。

我需要找到具有id="builtBy" 的行并更改日期。

我尝试了一些不同的方法。一个是

var res = str.replace(/id="lastModified".*>(.*)<.span>/, newDate );

我认为默认可能是更改括号中匹配的数据(不,它不起作用)。请参阅 JSFiddle code example 了解我尝试过但不起作用的方法。

注意:在我的情况下,我试图解决这个问题,因为对于使用 gulp-replace 的简单字符串替换,但这确实是一个 javascript 模式匹配和替换问题,所以我没有将 gulp-replace 带入这个除了提及它之外的问题。

注意:在我的例子中,这段代码没有在浏览器中执行,所以典型的 DOM 操作将不起作用。

我发现的其他问题(但没有回答我的问题)是:

【问题讨论】:

  • 一般来说,最好尽可能使用 DOM 遍历而不是正则表达式。
  • 另外,如果要使用正则表达式,请将正则表达式传递给.replace,而不是字符串
  • (?!lastModified)[^\>]+(?=\ 这将匹配日期,然后,您可以更改它。 (在 regex101 上工作:regex101.com/r/kA2kAG/1
  • 你的执行环境是什么? - 描述代码需要替换元素值的宿主(例如代码将在gulp/webpack/'browser'中运行)
  • @CertainPerformance,这是未在浏览器中运行的构建过程的一部分,因此 DOM 在节点中不可用(使用 gulp)。

标签: javascript regex


【解决方案1】:

您可以使用此正则表达式来匹配您的第一行:

/(<span id="lastModified">)(.*?)(</span>)/

它基本上从字面上匹配文本并将其捕获在三个组中,然后用于替换模式,可以是:

$12018-10-26$3

首先它替换为$1(第一个匹配的组),然后是您的日期(您希望来自一个变量),最后是$3,这是结束跨度。

【讨论】:

  • 谢谢@Poul Bak,这就是我想出的答案。所以最终的代码是var res = str.replace(/(&lt;span id="lastModified"&gt;)(.*?)(&lt;/span&gt;)/, '$12018-1026$3');
猜你喜欢
  • 2014-08-01
  • 2021-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-16
  • 1970-01-01
相关资源
最近更新 更多