so I know \\bBlah\\b will match a whole Blah, however it will also match Blah in \"Blah.jpg\" I don\'t want it to. I want to match only whole words with a space on either
(^|\s)Blah(\s|$)
should work, however it will also select the spaces, if you just want the word you can do this:
(^|\s)(Blah)(\s|$)
and take group 2 ($2 in ruby).
If want help with a RegEx, checkout: http://www.gskinner.com/RegExr/
Matching all:
\bBlah\b
Debuggex Demo
extracting all words in a string
words_array = str.match(/\b(\w|')+\b/gim) //only single qout allowed
You can try: \sBlah\s
.
Or if you allow beginning and end anchors, (^|\s)Blah(\s|$)
This will match "Blah"
by itself, or each Blah
in "Blah and Blah"
\s
stands for "whitespace character".^
matches the position before the first character in the string$
matches right after the last character in the stringIf you want to match both Blah
in "Blah Blah"
, then since the one space is "shared" between the two occurrences, you must use assertions. Something like:
(^|\s)Blah(?=\s|$)
Blah
The above regex would also match the leading whitespace.
If you want only Blah
, ideally, lookbehind would've been nice:
(?<=^|\s)Blah(?=\s|$)
But since Javascript doesn't support it, you can instead write:
(?:^|\s)(Blah)(?=\s|$)
Now Blah
would be captured in \1
, with no leading whitespace.
Try \sBlah\s
— that will match any form of whitespace on either side.