I was trying to use a regular expression to match the inner text between two characters, but I am getting the wrong text
I tried putting [A-z]* instead of .* for matching only the inner text and it worked. But I need to match non-letter characters too.
/\[?(,? ?\[(\[(.+)-(.+)\])\])\]?/g
This is my regular expression and i want to match the characters between the square brackets:
[[[hello-hello]],[[hi-hi]]]
The bold characters are the one matched.
I'd expect to match [[[hello-hello]],[[hi-hi]]] in match 1 and [[[hello-hello]],[[hi-hi]]] in match two.
If everything in between the []
would be desired, then we might simplify our expression to maybe:
(?:\[+)(.+?)(?:\]+)
Here, we capture our likely desired substring in this capturing group:
(.+?)
Then, we add two boundaries on its left and right sides using two non-capturing groups:
(?:\[+)
(?:\]+)
const regex = /(?:\[+)(.+?)(?:\]+)/g;
const str = `[[[hello-hello]]
[[hi-hi]]]
[[hi hi]]]`;
const subst = `$1`;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log('Substitution result: ', result);
If this expression wasn't desired, it can be modified/changed in regex101.com.
jex.im visualizes regular expressions: