在另外两个字符串文本 JS 之间查找和替换字符串文本

Find and replace string text between two other string texts JS

我正在尝试查找并替换字符串中的单词

示例:

let string = 
`
Title: Hello World
Authors: Michael Dan
`

我需要找到 Hellow World 并用我想要的替换,这是我的尝试:

const replace = string.match(new RegExp("Title:" + "(.*)" + "Authors:")).replace("Test")

您最好先转换为 object,然后再定义标题 属性:

let string = 
`
Title: Hello World
Authors: Michael Dan
`

const stringLines = string.split('\n');
let stringAsObject = {};

stringLines.forEach(
  (line) => {
    if (line.includes(':')) {
      stringAsObject[line.split(':')[0]] = line.split(':')[1];
    }
  }
);

stringAsObject.Title = 'NewValue';

您可以使用 replace 这样的方法:

string.replace("Hello World", "Test");

当您替换一些文本时,没有必要 运行 String#matchRegExp#exec 显式地 String#replace 在幕后进行。

您可以使用

let string = "\nTitle: Hello World\nAuthors: Michael Dan\n"
console.log(string.replace(/(Title:).*(?=\nAuthors:)/g, ' Test'));

模式匹配

  • (Title:) - 第 1 组:Title: 固定字符串
  • .* - 行的其余部分,除换行符、CR 和 LF 之外的任何零个或多个字符(我们需要使用此文本才能将其删除)
  • (?=\nAuthors:) - 与紧随其后的 LF 字符和 Authors: 字符串匹配的位置的正面前瞻。

参见regex demo

如果您的字符串中可以有一个 CRLF 行结尾,您需要将 (?=\nAuthors:) 替换为 (?=\r?\nAuthors:)(?=(?:\r\n?|\n)Authors:)

我可以不用正则表达式来实现。您所需要的只是知道您需要查找的字符串的索引。

var original = `
Title: Hello World
Authors: Michael Dan
`;

var stringToFind = "Hello World";
var indexOf = original.indexOf(stringToFind);
original = original.replace(original.substring(indexOf, indexOf + stringToFind.length), "Hey Universe!");

console.log(original)