найти первые совпадения символа в регулярном выражении - PullRequest
0 голосов
/ 09 ноября 2019

У меня есть строка, в которой я хочу найти символ "a" и первый символ "c" и заменить на символ "*", но регулярное выражение находит все символы "a" и "c", я не знаю, как это сделатьэто.

вот мой код:

var pattern=/[a][c]/g; //here my pattern
var str1="aaaaaaaaaabbbbbbaaaaaaaaaabbbccccccccccbbbbbbbbccc";
var rep=str1.replace(pattern,"*");
$("p").html(rep);

Ответы [ 2 ]

1 голос
/ 09 ноября 2019

Вам нужны две замены, потому что одна заменяет либо a, либо c, в зависимости от первого вхождения в строке.

var string = "aaaaaaaaaabbbbbbaaaaaaaaaabbbccccccccccbbbbbbbbccc",
    result = string
        .replace(/a/, '*')
        .replace(/c/, '*');

console.log(result);

Подход с единственной заменой и закрытием по хеш-таблице.

var string = "aaaaaaaaaabbbbbbaaaaaaaaaabbbccccccccccbbbbbbbbccc",
    result = string.replace(/[ac]/g, (h => c => h[c] ? c : (h[c] = '*'))({}));

console.log(result);
0 голосов
/ 09 ноября 2019

Вы можете использовать группы захвата для всех последовательностей a или c, кроме 1-й, и заменить их на '* $ 1' ($ 1 - шаблон замены для группы захвата):

const str = `aaaaaaaaaabbbbbbaaaaaaaaaabbbccccccccccbbbbbbbbccc`;

const result = str.replace(/[ac]([ac]+)/g, '*$1');

console.log(result);
...