2015-03-20 2 views
1

им борющихся со следующим сценарием, у меня есть строка многострочной которая имеет Тест слова несколько раз внутри, строка:Как заменить строку, которая не находится в кавычках

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

мне нужно, чтобы заменить все тест -струны, которые не находятся в кавычках каждый из найденных из них должны следовать по меньшей мере, 1 пробельных ИЛИ в LineBreak не что-нибудь еще, так что выше строка будет трансформироваться в:

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

также тест - строка может быть добавлена ​​пробелами, но не также без.

Что я уже выяснил, является методом только заменить строку, которая не находится внутри кавычек:

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

мог sombebody дать мне руку с нахождением других правил?

+0

я также хотел бы включить одинарные кавычки, так ни "тест", ни 'тест' будет получить заменен – beist87

ответ

1

Вы можете использовать:

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; }); 

Выход:

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

не работает должным образом, потому что «другое» заменяется на HELLOWORLD – beist87

+0

Неправильно, вы пробовали данный код в ответ. Как вы можете видеть, «тест» остается неизменным выше. – anubhava

+1

Им жаль, вы правы, это работает. Я просто скопировал шаблон регулярных выражений и заменил его в своем кодовом объявлении, и он не работал. – beist87

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

Try this.See demo.

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

+0

этот тоже заменяет test -строки внутри одинарных кавычек – beist87

+0

@ beist87 см. демо https: // regex101.com/r/pT4tM5/30 – vks

Смежные вопросы