String example:
~~333~~
I need to get everything inbetween
~~
Regex that works:
/^(~{2})(.*?)(~{2})$/gm
But it also gets this string:
~~~333~~~
and also this:
~~~~333~~~~
What regex will get only the first one?
CodePudding user response:
The reason your regex is matching the latter two test cases is because of your wildcard character .
is picking up the inner ~
s. To fix this, and make it only match numbers you could do this:
/^~{2}([0-9]*)~{2}$/gm
If you want to catch other characters as well as long as they ae not ~
you could match all characters excluding the ~
character like this:
^~{2}([^~]*)~{2}$
Both of these only match the first test case ~~333~~
and not the others.
CodePudding user response:
You could use a lookaround approach on both ends to ensure that tilde does not precede or follow the ~~
markers.
var input = "~~333~~ ~~~444~~~ ~~~~5555~~~~";
var matches = input.match(/(?:^|[^~])~~([^~] )~~(?!~)/g);
console.log(matches);
CodePudding user response:
To get the string between the first set of double tildes (~~
) and exclude strings with additional tildes, you can use the following regular expression:
/^(~{2})([^~]*)(~{2})$/gm
([^~]*)
: This matches zero or more characters that are not tildes ([^~]
). The *
specifies that the preceding character or group (in this case, the negated character class) should be matched zero or more times.
CodePudding user response:
The below regex will match for exact two '~' in beginning and at last. And any string between those.
/^(~{2})([^~]*)(~{2})$
CodePudding user response:
Try this:
^~~[^~\r\n] ~~$
^
match the start of the line.
~~
match two literal ~
.
[^~\r\n]
match one or more character that is not ~
because we don't want to cross the two closing ~~
, and also not \r
or \n
because we also don't want to cross newline characters.
~~
match two literal ~
.
$
match the end of the line.
See regex demo.