Выражение регулярного выражения для имени файла с 2 подчеркиваниями и 3 сегментами - PullRequest
0 голосов
/ 12 декабря 2018

Мне нужно выражение regex , которое будет выбирать файлы с определенным форматом имени файла из списка файлов свойств.
Мне нужно выбрать файлы с именами файлов в следующем формате:

<app_name>_<app_version>_<environment>.properties
  • здесь <app_name> может быть любым буквенно-цифровым символом со специальным символом <A-Z/a-z/0-9/special char>, например abc123 или app1-1
  • здесь <app_version> может быть любым буквенно-цифровым символом со специальным символом <A-Z/a-z/0-9/special char/float value> например abc или даже число с плавающей запятой / целое число / строка 1.0 или 2 или abc1
  • здесь <environment> может быть любым буквенно-цифровым со специальным символом <A-Z/a-z/0-9/special char> подобно production или prod1

Вместе они связаны 2 подчеркиванием следующим образом: -

<A-Z/a-z/0-9/special char>_<A-Z/a-z/0-9/special char/float value>_<A-Z/a-z/0-9/special char>.properties

Имя файла всегда содержит 2 подчеркивания _, и это может быть любая строка междуподчеркивания.
для примеров, следующие: допустимые имена файлов, которые можно выбрать:

app1_1.0_prod1.properties
app2_2_prod2.properties
app_vers1_prod.properties
app-1_vers1_prod-2.properties
asd_efg_eee.properties

Это может быть буква или цифра или специальный символ или комбинация между ними, междуподчеркивание.
Обратите внимание, чтоt в имени файла может быть только 2 подчеркивания _.
Все, кроме 2 подчеркивания _ не является допустимым именем файла и не будет выбрано, а в имени файла эти 3 раздела всегда должны быть разделены 2подчеркивание _
Ниже приведены недопустимые имя файла:

abc.properties
abc.123.efg.properties
as_1.efg.ddd.rr.properties
ee_rr.properties
_rr_.properties

Я попробовал следующее регулярное выражение:

[^_]*\\.[^_].properties  

, но не работает.Может быть, это не так.Я не понимаю, как это получить.Пожалуйста, помогите мне в создании этого регулярного выражения.
Спасибо

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Это должно сработать, поскольку каждый раздел может содержать практически любой символ, кроме подчеркивания: /[^_]*_[^_]*_[^_]\.properties/

0 голосов
/ 12 декабря 2018

Я считаю, /^[^_]+_[^_]+_[^_]+\.properties$/ должно соответствовать вашим требованиям:

const tests = [
  'app1_1.0_prod1.properties',
  'app2_2_prod2.properties',
  'app_vers1_prod.properties',
  'asd_efg_eee.properties',
  'abc.properties',
  'abc.123.efg.properties',
  'as_1.efg.ddd.rr.properties',
  'ee_rr.properties',
  '_rr_.properties'
];

tests.forEach(test => { 
  console.log(test, /^[^_]+_[^_]+_[^_]+\.properties$/.test(test)); 
});

В качестве альтернативы вы можете использовать /^([^_]+_){2}[^_]+\.properties$/

Если вы хотите ограничить использование ., то я думаю, что вы хотите

/^[^_.]+_([^_.]+|\d+(\.\d+)?)_[^_.]+\.properties$/
...