\b
соответствует границе слова нулевой длины, а не пробелу. Вы ищете что-то вроде этого:
/first\b.\bsecond/.match('first second')
Это соответствует любому символу (.
) между first
и second
, до тех пор, пока слово граница с обеих сторон.
Однако это не так, как границы слов, как правило, используется (так как нет необходимости использовать проверку нулевой длины, когда вы сопрягая слово границы самого по себе). \b
по существу ищет символ без слова после символа слова; поэтому, вместо этого, вы можете просто искать несловообразующий характер в-между t
в first
и s
в second
:
/first\Wsecond/.match('first second')
Это точно так же, как и в первом примере ... но, реально, вы вероятно, просто хочу, чтобы соответствовать пустому пространству и может использовать что-то вроде этого:
/first\ssecond/.match('first second')
@ третьего примера WiktorStribiżew показывает наилучшее использование словоразделов (в начале и в конце). Это связано с тем, что вы не согласны ни с чем до или после, поэтому полезно использовать тест нулевой длины. В противном случае приведенные выше примеры могут соответствовать примерно first secondary
. В конце концов, я хотел бы использовать выражение типа:
/\bfirst\ssecond\b/.match('first second')
См http://stackoverflow.com/questions/39875620/python-regex-words-boundary-with-unexpected-results/39876126#39876126. '\ b' не соответствует пробелам и между« первым »и« вторым ». –
'\ b' обычно используется в начале или конце выражения только потому, что его утилита в других местах сомнительна. – tadman
@tadman есть шанс, что '\ b' может быть полезен в середине выражения, но это так редко, что я не могу придумать реальный случай использования в мире. Что-то вроде этого эффективно используется: '/ [az] \ b [az] /' – Sam