title: RegExp to match conventional commit syntax
body: <p>I've been fiddling around this since yesterday.<br>
  I just can't seem to match all the possible cases.</p>
  
  <p>I'm trying to come up with a regular expression which matches a <a href="https://www.conventionalcommits.org/en/v1.0.0/" rel="noreferrer">Conventional Commit</a>, but which also offers some error recovery functionality.</p>
  
  <p>Current regexp:</p>
  
  <pre><code>(?&lt;type&gt;build)(?&lt;scope&gt;\(.*\)?(?=:))?(?&lt;breaking&gt;!)?(?&lt;subject&gt;:.*)?
  </code></pre>
  
  <p>Inputs:</p>
  
  <pre><code>build(one)
  build(two)!
  build(three)!:test
  build(example:module)!: test
  build: test
  build(&lt;&gt; : dda!sd): test
  build(:
  build
  </code></pre>
  
  <p>Outputs:</p>
  
  <p><a href="https://i.stack.imgur.com/dF6UM.png" rel="noreferrer"><img src="https://i.stack.imgur.com/dF6UM.png" alt="enter image description here"></a></p>
  
  <p>What doesn't work:</p>
  
  <ul>
  <li>first two cases</li>
  <li>the <code>!</code> isn't captured as <code>breaking</code> in the third and following cases</li>
  </ul>
  
  <hr>
  
  <p>The sample is at Regex101, <a href="https://regex101.com/r/XYC04q/1" rel="noreferrer">https://regex101.com/r/XYC04q/1</a><br>
  And I have other (16) tests here, <a href="https://regex101.com/r/sSrvyA/11" rel="noreferrer">https://regex101.com/r/sSrvyA/11</a></p>
  
  <p>Even if you have no time to try and modify it, any comment is appreciated.</p>