问题
I want to match string ending with ')' . I use pattern :
"[)]\b" or ".*[)]\b"
It should match the string :
x=main2.addMenu('Edit')
But it doesn't work. What is wrong ?
回答1:
The \b only matches a position at a word boundary. Think of it as a (^\w|\w$|\W\w|\w\W)
where \w is any alphanumeric character and \W is any non-alphanumeric character. The parenthesis is non-alphanumeric so won't be matched by \b.
Just match a parethesis, followed by the end of the string by using \)$
回答2:
If you want to capture a string ending in )
(and not just find a trailing )
), then you can use this in JS:
(.*?\)$)
(....)
- captures the defined content;
.*?
- matches anything up to the next element;
\)$
- a )
at the end of the string (needs to be escaped);
Regex101
回答3:
The \b
word boundary is ambiguous: after a word character, it requires that the next character must a non-word one or the end of string. When it stands after a non-word char (like )
) it requires a word character (letter/digit/underscore) to appear right after it (not the end of the string here!).
So, there are three solutions:
- Use
\B
(a non-word boundary):.*[)]\B
(see demo) that will not allow matching if the)
is followed with a word character - Use
.*[)]$
withMULTILINE
mode (add(?m)
at the start of the pattern or add the/m
modifier, see demo) - Emulate the multiline mode with an alternation group:
.*[)](\r?\n|$)
(see demo)
来源:https://stackoverflow.com/questions/35858628/regex-how-to-match-word-ending-with-parentheses