2016-02-19 2 views
1

Например:Заменить п-ю вхождение строки

'abcjkjokabckjk'.replace('/(abc)/g',...) 

Если я хочу для замены указать позицию «ABC», что я могу сделать?

Как это: enter image description here

+1

вы хотите заменить второе вхождение в 'abc'? – Tushar

+0

не только второй, если строка состоит из многих «abc», как заменить параметр «abc» собой? – ChenLee

+1

как sepcific? u должен делить условие, чтобы найти этот конкретный «abc». для ex: второй, последний или «abc» после «z» – Aaron

ответ

5

Используйте RegExp конструктор для передачи переменных в регулярном выражении.

var s = 'abcjkjokabckjk' 
 
search = 'abc' 
 
var n = 2 
 
alert(s.replace(RegExp("^(?:.*?abc){" + n + "}"), function(x){return x.replace(RegExp(search + "$"), "HHHH")}))

+1

Sweet !! Вы могли бы использовать игла 'search' в RegExp. – FFish

2

Это может быть сделано без регулярных выражений.

методов Струнных String#indexOf, String#lastIndexOf могут быть использованы с String#substring

var string = 'abcde|abcde|abcde|abcde', 
 
    needle = 'abc', 
 
    firstIndex = string.indexOf(needle), 
 
    lastIndex = string.lastIndexOf(needle); 
 

 
// ---------------------------------------------------------------- 
 
// Remove first occurence 
 
var first = string.substring(0, firstIndex) + '***' + string.substring(firstIndex + needle.length); 
 
document.getElementById('first').innerHTML = first; 
 

 
// ---------------------------------------------------------------- 
 
// Remove last occurence 
 
var last = string.substring(0, lastIndex) + '***' + string.substring(lastIndex + needle.length); 
 
document.getElementById('last').innerHTML = last; 
 

 
// ---------------------------------------------------------------- 
 
// Remove nth occurence 
 
// For Demo: Remove 2nd occurence 
 
var counter = 2, // zero-based index 
 
    nThIndex = 0; 
 

 
if (counter > 0) { 
 
    while (counter--) { 
 
    // Get the index of the next occurence 
 
    nThIndex = string.indexOf(needle, nThIndex + needle.length); 
 
    } 
 
    
 
    // Here `nThIndex` will be the index of the nth occurence 
 
} 
 

 
var second = string.substring(0, nThIndex) + '***' + string.substring(nThIndex + needle.length); 
 
document.getElementById('second').innerHTML = second;
table tr td:nth-child(2) { 
 
    color: green; 
 
} 
 
td { 
 
    padding: 15px; 
 
}
<table border="1px"> 
 
    <tr> 
 
    <td>After replacing <strong>first</strong> occurence:</td> 
 
    <td id="first"></td> 
 
    </tr> 
 
    <tr> 
 
    <td>After replacing <strong>last</strong> occurence:</td> 
 
    <td id="last"></td> 
 
    </tr> 
 
    <tr> 
 
    <td>After replacing <strong>2nd<sup>zero-based index</sup></strong> occurence:</td> 
 
    <td id="second"></td> 
 
    </tr> 
 
</table>