2013-07-23 3 views
12

Я читал много Q & Как и в StackOverflow, и мне все еще сложно получить RegEX. У меня есть строка 12_13_12.javascript заменить последнее вхождение строки

Как заменить последнее вхождение 12 на, aa.

Конечный результат должен быть 12_13_aa.

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

+0

будет ли этот последний номер всегда содержать 2 цифры? –

+0

@GintasK нет .. он обычно не содержит 2 цифры и, как и другая пара чисел –

+0

'12_13_12'.replace (/ 12 ([^ 1] [^ 2]) * $ /,' aa ') // 12 за которым следует какой-либо не 12 шаблон – TheOne

ответ

14
newString = oldString.substring(0,oldString.lastIndexOf("_")) + 'aa'; 
3

Используйте этот String.replace и убедитесь, что у вас есть конец ввода $ в конце:

repl = "12_13_12".replace(/12(?!.*?12)/, 'aa'); 

EDIT: Чтобы использовать переменную в Regex:

var re = new RegExp(ToBeReplaced); 
repl = str.replace(re, 'aa'); 
+0

, это был просто пример –

+1

на самом деле, если бы я понял, что означает $ средство для последнего вхождения числа/строки 12, правильно? потому что это так, полагают, что это сработает. –

+0

@VeraGavriel: Да, это правильно. – anubhava

24

Вы можете используйте эту замену:

var str = '12-44-12-1564'; 
str = str.replace(/12(?![\s\S]*12)/, 'aa'); 
console.log(str); 

объяснения:

(?!   # open a negative lookahead (means not followed by) 
    [\s\S]*  # all characters including newlines (space+not space) 
       # zero or more times 
    12 
)    # close the lookahead 

Другими словами означает: 12 не следовал другим 12 до конца строки.

+4

+1 для использования решения regex и добавления подробного объяснения. –

+1

(плюс один), не требуя, чтобы строка поиска была в конце ($) –

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