我正在尝试在字符串中查找和替换一个单词。
示例:
let string =
`
Title: Hello World
Authors: Michael Dan
`
我需要找到
Hello World
并替换为我想要的内容,以下是我的尝试:const replace = string.match(new RegExp("Title:" + "(.*)" + "Authors:")).replace("Test")
我正在尝试在字符串中查找和替换一个单词。
示例:
let string =
`
Title: Hello World
Authors: Michael Dan
`
Hello World
并替换为我想要的内容,以下是我的尝试:const replace = string.match(new RegExp("Title:" + "(.*)" + "Authors:")).replace("Test")
当您替换一些文本时,不必显式地运行String#match
或RegExp#exec
,String#replace
会在幕后自动运行。
您可以使用
let string = "\nTitle: Hello World\nAuthors: Michael Dan\n"
console.log(string.replace(/(Title:).*(?=\nAuthors:)/g, '$1 Test'));
模式匹配
(Title:)
- 第1组:固定字符串Title:
.*
- 匹配行的其余部分,零个或多个非换行符、CR和LF字符(我们需要消耗这个文本以删除它)(?=\nAuthors:)
- 正向先行断言,匹配一个位置,该位置紧随LF字符和字符串Authors:
之后。请参见正则表达式演示。
如果您的字符串中可能会有CRLF行结尾,则需要将(?=\nAuthors:)
替换为(?=\r?\nAuthors:)
或(?=(?:\r\n?|\n)Authors:)
。
你最好先转换为对象,然后只定义标题属性:
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';
:
字符分隔,那么最好将其转换为键入对象,然后替换您的标题。 - Tom您可以使用以下方式的replace
方法:
string.replace("Hello World", "Test");
我可以不用正则表达式实现这个功能。你只需要知道需要查找的字符串的索引。
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)
replace()
时,不需要使用match()
。可以在此处使用string.replace(/(Title:).*(?=\nAuthors:)/gs, '$1Test')
。 - Wiktor Stribiżews
标志上有误。无论如何,你需要保留第一个和最后一个单词。 - Wiktor Stribiżew