2016-07-20 5 views
3

У меня проблемы с регулярным выражением.регулярное выражение найти конец строки

Я хочу, чтобы заменить все вхождения myData=xxxx& хххх может меняться, но всегда заканчивается &, за исключением последнего вхождения, когда myData=xxx.

var data = "the text myData=data1& and &myData=otherData& and end myData=endofstring" 
data.replace(/myData=.*?&/g,'newData'); 

возвращается:

текст NewData и & NewData и конец MyData = endofstring

, который является правильным, но как я могу обнаружить последний?

ответ

5

две вещи:

  1. Вы должны присвоить результат replace где-то, что вы не делаете в коде вашего вопроса в

  2. Вы можете использовать чередование (|) в соответствуют либо &, либо концу строки

Итак:

var data = "the text myData=data1& and &myData=otherData& and end myData=endofstring" 
 
    data = data.replace(/myData=.*?(?:&|$)/g,'newData'); 
 
// ^^^^^^^-- 1     ^^^^^^^-- 2 
 
console.log(data);

Обратите внимание на использование не-захвата группы ((?:...)), чтобы ограничить объем чередовании.

+0

было бы правильно использовать вместо (?: & | $) [& $ \.]? – Poyke

+0

@ MC93: Почему вы так говорите? Он заменит последнее вхождение, даже если оно не находится в конце строки, если за ним следует '&' (что в значительной степени должно было бы быть). –

+0

@Poyke: Нет. '[& $]' Ищет * символы * 'и' и '$'. –

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