I'm trying to find and replace a word in a string
Example:
let string =
`
Title: Hello World
Authors: Michael Dan
`
I need to find the Hellow World
and replace with whatever I want, here is my attempt:
const replace = string.match(new RegExp("Title:" "(.*)" "Authors:")).replace("Test")
CodePudding user response:
When you replace some text, it is not necessary to run String#match
or RegExp#exec
explicitly, String#replace
does it under the hood.
You can use
let string = "\nTitle: Hello World\nAuthors: Michael Dan\n"
console.log(string.replace(/(Title:).*(?=\nAuthors:)/g, '$1 Test'));
The pattern matches
(Title:)
- Group 1:Title:
fixed string.*
- the rest of the line, any zero or more chars other than line break chars, CR and LF (we need to consume this text in order to remove it)(?=\nAuthors:)
- a positive lookahead that matches a location that is immediately followed with an LF char andAuthors:
string.
See the regex demo.
If there can be a CRLF line ending in your string, you will need to replace (?=\nAuthors:)
with (?=\r?\nAuthors:)
or (?=(?:\r\n?|\n)Authors:)
.
CodePudding user response:
You might be better off converting to an object first and then just defining the title property:
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';
CodePudding user response:
You can use replace
method like that:
string.replace("Hello World", "Test");
CodePudding user response:
I can achieve this without regex. All you need is knowing the index of the string that you need to find.
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)