Я бы использовал /^([^:]+)(?::[^:]+){3}:([^:]+)/
для этого.
Объяснил (более подробное объяснение в regex101 ):
^
совпадений с начала строка (…)
является первой группой захвата. При этом будет получено, что начальная "password"
[^:]+
соответствует одному или нескольким символам, отличным от двоеточия
(?:…)
является группой без захвата (она ничего не собирает для дальнейшего использования) :[^:]+
соответствует двоеточию, а затем 1+ не двоеточия
{3}
указывает нам сопоставить предыдущий элемент (группа без захвата) ) 3 раза :
соответствует буквенному двоеточию ([^:]+)
фиксирует совпадение 1+ не-двоеточий, что даст нам 9233321110
в этом примере
Первая группа захвата обычно хранится как $1
или как первый элемент возвращаемого массива. (В Javascript нулевой элемент - полное совпадение, а индекс элемента 1 - первая группа захвата.) Вторая группа захвата - $2
, et c.
Чтобы всегда соответствовать "password"
key, hard-code it: /^("password")(?::[^:]+){3}:([^:]+)/
Вот живой фрагмент, демонстрирующий это:
x = `"password":"password123:cityaddress:mailaddress:9233321110:gender:45"`;
match = x.match(/^([^:]+)(?::[^:]+){3}:([^:]+)/);
if (match) console.log(match[1] + ":" + match[2]);
else console.log("no match");