Как при наличие {8} или {8,9} получить true, но если в тексте кроме {8} и {8,9} присутствуют просто фигурные скобки то false?
Как написать регулятор выражение чтобы при условие:
Если #\{[0-9]+\}|\{[0-9]+,[0-9]+\}# то True, но если в тексте кроме {8} и {8,19} присутствуют обычные фигурные скобки: {,} или {} то False.
Как написать регулятор выражение чтобы при таких условиях получить true или false?
Ответы (1 шт):
Если задача сформулирована так, что в тексте допустимо только одно вхождение группы чисел в фигурных скобках {\d+}|{\d+,\d+} (далее - Группа) в окружении любых символов, кроме фигурных скобок, то можно использовать выражение ^[^}{]*(?:{\d+}|{\d+,\d+})[^}{]*$. Здесь начинаем просмотр с начала строки, запрещаем символы фигурных скобок [^}{]* до Группы, проверяем Группу, далее до конца строки также запрещаем символы фигурных скобок.
const text = '{8}\n' +
'{8,9}\n' +
'{8}{8,9}nlsca\n' +
'{15}{87,99}{87,99}{2,4}fff\n' +
'{}\n' +
'{8}{,}mc;klca\n' +
'{}{8,9}\n' +
' gh ndg dfg{8}{8,9}{,}fbnnhn\n' +
'{55,45,88}\n' +
'{55,45,88}{8,9}\n' +
'ffdsfsfsfaav {55,45} wdjldjasda\n' +
'lsdlskdlskdls\n' +
'{55,45}\n' +
'{55,45}ffdsfsfsfaav'
rg = RegExp('^[^}{]*(?:{\\d+}|{\\d+,\\d+})[^}{]*$')
text.split('\n').forEach(t => console.log(t, rg.test(t)));
Если же таких Групп допустимо несколько, то можно применить выражение
^(?:[^}{]*(?:{\d+}|{\d+,\d+})[^}{]*)+$
т.е. оформить подвыражение от ^ до $ как незахватываемую группу и добавить квантификатор +.
const text = '{8}\n' +
'{8,9}\n' +
'{8}{8,9}nlsca\n' +
'{15}{87,99} {87,99}dddd{2,4}fff\n' +
'{}\n' +
'{8}{,}mc;klca\n' +
'{}{8,9}\n' +
' gh ndg dfg{8}{8,9}{,}fbnnhn\n' +
'{55,45,88}\n' +
'{55,45,88}{8,9}\n' +
'ffdsfsfsfaav {55,45} wdjldjasda\n' +
'lsdlskdlskdls\n' +
'{55,45}\n' +
'{55,45}ffdsfsfsfaav'
rg = RegExp('^(?:[^}{]*(?:{\\d+}|{\\d+,\\d+})[^}{]*)+$')
text.split('\n').forEach(t => console.log(t, rg.test(t)));