beist87
beist87

Reputation: 43

How to replace a string which is not in quotes

im struggling with the following scenario, i have a multiline string which has the word test multiple times inside, the string is:

Hello my name is "test" im a test
test is testing

i need to replace all the test -strings which are not in quotes every of the found ones should be followed by at least 1 whitespace OR a linebreak not by anything else, so the above string would transform into:

Hello my name is "test" im a HELLOWORLD
HELLOWORLD is testing

also the test -string could be prepended by whitespaces, but not also without.

What i already found out is a method to only replace a string which is not inside of quotes:

str.replace(/(test)(?=(?:[^"]|"[^"]*")*$)/, 'HELLOWORLD')

could sombebody give me a hand with finding the other rules?

Upvotes: 1

Views: 949

Answers (2)

anubhava
anubhava

Reputation: 784898

You can use:

var str = 'Hello my \'test\' name is "test" im a test\ntest is testing';
var repl = str.replace(/("[^"]*"|'[^']*')|\btest\b/g, function($0, $1) { 
           return ($1 == undefined) ? "HELLOWORLD" : $1; });

Output:

Hello my 'test' name is "test" im a HELLOWORLD
HELLOWORLD is testing

Upvotes: 1

vks
vks

Reputation: 67968

(\btest\b)(?=(?:[^"]|"[^"]*")*$)

Try this.See demo.

https://regex101.com/r/pT4tM5/28

Upvotes: 3

Related Questions