2013-06-29 2 views
0

У меня есть такая фраза какJavascript регулярного выражения «подслово» заменить

«все меняется вокруг меня, чудной вещи +, tthingxx»

и я хочу изменить каждое слово, которое содержит *** вещи в конце этого слова, или в большинстве другого персонажа после «вещь», как «+» или «ч» или «х» ...

что-то вроде

string = 'everything is changing around me, wonderful thing+, tthingxx' 
regex = new RegExp('thing(\\+|[g-z])$','g'); 
string = string.replace(regex, '<b>thing$1</b>'); 

что я хочу? каждый вещь меняется вокруг меня, прекрасная вещь +, tthingxx

результат моих регулярных выражений? ничего работает ... если я удалить все слова, содержащие $ «вещь» и, по крайней мере, еще один символ после того, как подбираются:

все меняется вокруг меня, замечательная вещь +, т thingx х

Я пробовал все, но - на первом месте я не могу понять очень хорошо технический английский - и, во-вторых, я не нашел ответа.

что я должен сделать ??? спасибо заранее


решение, которое я нашел использовал это регулярное выражение

/thing([+g-z]){0,1}\b/g 

или с RegExp (мне нужно это, потому что я должен передать переменную):

myvar = 'thing'; 
regex = new RegExp(myvar + "([+g-z]){0,1}\\b" , "g"); 

Мне не удалось побег \ при выполнении регулярного выражения во втором режиме. Но этого недостаточно: + выходит из < b > и я действительно не знаю почему !!!


решение, которое работает, как я хочу, это один на @Qtax:

/thing([+g-z])?(?!\w)/g 

спасибо сообществу!

+2

То, что вы хотите получить не ясно, по крайней мере, для меня. Каков желаемый результат? –

+0

Я заметил, что использование 'thing (\\ + | [g-z]) {0,1}' немного лучше, но я не знаю, как сказать regexp, что есть конец слова. $ не работает, \ b не работает ... –

+1

Я решил: я пытался использовать \ b istead из ** \\ b ** во время строки определения RegExp ... теперь все в порядке: 'RegExp (' вещь (\\ + | [gz]) {0,1} \\ b ') ' –

ответ

0

Чтобы решить эту проблему с + не соответствует при использовании \b вы можете использовать (?!\w) вместо \b там, как:

thing[+g-z]?(?!\w) 
+0

это прекрасно, чтобы завершить ваш ответ. Я добавляю '/ thing ([+ gz])? (?! \ W)/g', которые помнят первую скобку, такую ​​как Я хочу, спасибо! –

0

Использование границей в своем регулярном выражении

\b\w+thing(\+|[g-z])?\b 
+0

Регулярное выражение, которое вы использовали, заменяет все слово и не работает для меня словами, заканчивающимися +, g, h, i ..., z. –

0

Если я понимаю, что вы хотите, то:

string = 'everything is changing around me, wonderful thing+, tthingxx'; 
string = string.replace(/thing(\b|[+g-z]$)/g, '<b>thing$1</b>'); 

... что приводит:

every<b>thing</b> is changing around me, wonderful <b>thing</b>+, tthingxx

\b является границы слова, так что, как гласит регулярное выражение, где-нибудь он находит «вещь», за которой следует wo rd или+ или g-z в конце строки, выполните замену.

+0

кажется ясным, но он не работает ... –

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