Javascript regex: имя свойства захвата после индекса массива - PullRequest
2 голосов
/ 16 июня 2020

В Javascript, имея строку, представляющую путь к свойству объекта, который содержит массив, какой способ лучше всего зафиксировать имя свойства после индекса массива с помощью регулярного выражения?

Имея это:

'someArray[0].property.otherIgnorableProperties'

Мне было бы интересно захватить только часть «свойства», игнорируя часть «someArray [0]» и все, что идет после «свойства» (включая точку). Часть «свойство» может иметь ограниченное количество возможных произвольных имен.

До сих пор я пробовал это:

'someArray[0].property'.match(/^someArray\[\d\]\.property|someOtherPropertyName|otherName/g);

Спасибо!

EDIT :

После ответа cars10m я пришел к следующему:

'someArray[0].field3.other'.match(/(?!someArray[\d+]\.)field1|field2|field3.*/g) 

но это не удалось, потому что для field3 он возвращает 'field3.other'. Для field1 и field2 работает нормально. Чтобы уточнить, мне нужно, чтобы он возвращал совпавший сегмент: field1, field2 или field3.

Ответы [ 2 ]

2 голосов
/ 16 июня 2020

Это сделает это:

let strings=['someArray[0].wantedprop1.otherIgnorableProperties',
             'dada[123].unwantedprop1.second.third',
             'X[91234].wantedprop2',
             'sameArray[94].wantedprop2.again',
             'sameArray[94].wantedprop2notwanted',
             'doNotTakeThis.wantedprop2.itIsNotAnArrayElement'
            ];
strings.forEach(str=>{
  let m=str.match(/.+\[\d+\]\.(wantedprop1|wantedprop2|anyotherwantedprop)(?!\w)/);
  let result=m&&m[1];
  console.log(result);
})

Он возвращает первую группу захвата как «единственное сохранившееся содержимое» строки, но только если соответствует весь шаблон.

Имя array еще не проверяется, но вы можете сделать это, используя вместо этого следующий RegExp:

/someArray\[\d+\]\.(wantedprop1|wantedprop2)(?!\w)/
0 голосов
/ 16 июня 2020

Вы можете зафиксировать «свойство» с помощью следующего регулярного выражения в JavaScript разновидности:

^'\w+[[]\d+[\]]\.(\w+)\.\w+'

Захватывает:

property

См. Ссылку: https://regex101.com/r/s7yPpG/2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...