2016-12-29 2 views
0

У меня есть строка что-то вроде, и я хочу, чтобы соответствовать только первым «{» каждого {{xxxx}} рисункаЧто должно быть регулярное выражение, чтобы соответствовать начало строки

{ {ABCD}} { {EFG}} { {Hij}}

{ {ABCD}} { {EFG}} { {Hij}} {

Я попытался с /(\s|^|.){/g, но эта модель соответствует

{ {ABCD} } { {EFG} } { {Hij}}

Может кто-то один наставит меня в правильном направлении

+0

Итак, вы хотите, чтобы избежать совпадения '{{{текст}}' на всех? –

+0

Да, только первый '{' каждого {{text}} –

+0

Вы удаляете или заменяете? Я думаю, вам нужно '/ ([^ {] | ^) {(? = {. *?}})/G' (или' ([^ {] | ^) {(? = {(?! {). *?}}) '), но окончательное решение зависит от того, что вам нужно достичь в конце. С регулярным выражением JS часто не имеет значения, что соответствует регулярному выражению, но что он * захватывает * и * как * используется регулярное выражение. –

ответ

0

Вы должны использовать /(^|[^{]){/g (что спички и захватывает в группах 1 запуск из-строки или любого символа, кроме {, а затем соответствует {) и проверьте, Группа 1 соответствует каждой итерации RegExp#exec. Тогда, если группа 1 совпадают, увеличиваем индекс соответствия:

var re = /(^|[^{]){/g; 
 
var str = "{{abcd}}{{efg}}{{hij}}\n{{abcd}}{{efg}}{{hij}}{"; 
 
//   0  8  15  23  31  38  45 
 
var m, indices = []; 
 
while ((m = re.exec(str)) !== null) { 
 
    indices.push(m.index + (m[1] ? 1 : 0)); 
 
} 
 
console.log(indices);

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