Вы можете попробовать /^([^-]+)(-(.*))?$/
. Одна из проблем заключается в том, что первый +
находится за пределами группы захвата, что означает, что он будет соответствовать только последнему символу. Во-вторых, .*
является жадным и будет соответствовать -
, пожирая его до конца строки.
Пример выполнения:
console.log("abc-def".match(/^([^-]*)(-(.*))?$/));
console.log("abc".match(/^([^-]*)(-(.*))?$/));
Возможно, вам не потребуется захватывать подстроку, начинающуюся с -
, и в этом случае /^([^-]*)(?:-(.*))?$/
может работать.