Home > Software design >  Find and replace string text between two other string texts JS
Find and replace string text between two other string texts JS

Time:12-11

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 and Authors: 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)

  • Related