Regular match against opening parentheses not preceded by "]"

I have snippets of text where a regular markdown and a custom markup extension are mixed together. This works well enough.

[My Link Title](

(extension: value attribute: value)


However, I have one problem, apply some styles when editing text, I need a way to match the open parenthesis of the extension chunk without matching the open parenthesis of the markdown link.

In other words: I need a regex (which works in javascript) to match the opening parenthesis (and only the parenthesis) when it is

  • performed [a-z0-9]+:

  • is not preceded by a character ]


My current regular expression for this (which works well to compare the parentheses extensions, but, unfortunately, includes brackets opening links by default) as follows: /\((?=[a-z0-9]+:)/i


I've seen people use regex negative negative imagery, sort of /(?=[^\]])\((?=[a-z0-9]+:)/i

to test this in PHP . Unfortunately this doesn't work in javascript.


Thanks for your advice!

The problem I am facing is that I am creating a "Simple Mode" syntax for CodeMirror in order to apply highlighting. This allows you to specify a regular expression and token to be applied to the matched characters, but does not allow further match operations. However, you could write a full syntax mode where you can do operations like this, but I am not capable of that: -s

In the end, I went with a different solution. I just created two regular expressions:

  • Match all the opening parentheses of the extension to the previous character followed by "]":

  • Matches all opening parentheses of an extension without a leading character:

Even though this is not the cleanest way, it seems to work very well now.


source to share

1 answer

Using the skip trick :



  • \[[^\]]+\]\([^\)]+\)

    - match []()

    links (you can also write \[.*?\]\(.*?\)

    if it's too confusing), OR -
  • (\(\b)

    - match and freeze open parentheses that appear immediately before an alphanumeric character.

Working example:

You will need to see the result and only handle the matches where the group is $1

grouped and ignore the rest of the matches.



All Articles