Javascript reg ex to match whole word only, bound only by whitespace

前端 未结 5 1285
轮回少年
轮回少年 2020-12-03 02:58

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

相关标签:
5条回答
  • 2020-12-03 03:04

    (^|\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/

    0 讨论(0)
  • 2020-12-03 03:05

    Matching all:

    \bBlah\b
    

    Regular expression visualization

    Debuggex Demo

    0 讨论(0)
  • 2020-12-03 03:06

    extracting all words in a string

    words_array = str.match(/\b(\w|')+\b/gim)   //only single qout allowed
    
    0 讨论(0)
  • 2020-12-03 03:18

    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"

    See also

    • regular-expressions.info/Character classes and Anchors
      • \s stands for "whitespace character".
      • The caret ^ matches the position before the first character in the string
      • Similarly, $ matches right after the last character in the string

    Lookahead variant

    If 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|$)
    

    See also

    • regular-expressions.info/Lookarounds

    Capturing only 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.

    See also

    • regular-expressions.info/Grouping and flavor comparison
    0 讨论(0)
  • 2020-12-03 03:23

    Try \sBlah\s — that will match any form of whitespace on either side.

    0 讨论(0)
提交回复
热议问题