JavaScript — (регулярное выражение) Ошибка разница между \ B и НЕ \ B

Я хотел проверить работу \B в частности, по разным
двигатели, которые должны обрабатываться одинаково.

Мне нужно было сделать это, чтобы чувствовать себя уверенно при использовании этой конструкции.

Двигатели регулярных выражений: Perl, PHP, JS и Boost.
Эти двигатели должны ВСЕ произвести точно такой же результат.

Но они этого не делают.

Теоретически, \ B должно совпадать везде, где нет \ b.
В приведенном ниже списке показаны результаты с использованием одного и того же регулярного выражения на разных движках.

Мне кажется, что PHP и JavaScript работают согласно определению,
но Perl и Boost немного отличаются.

Если кто-то может подтвердить эти результаты и / или пролить свет на то,
это результат ошибок.
Или, возможно, существует неправильное представление об определениях \ б а также \ B
поскольку для этих двигателей они абсолютно должны быть абсолютно одинаковыми.

Спасибо за ваше время!

(простой код для создания этого вывода не включен, но может быть при необходимости)

 Target      = '   ssssssssssssss '
Replacement = '<>'

==================================================
PHP 7.03

\b      = '   <>ssssssssssssss<> '
\B      = '<> <> <> s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s <>'
(?!\b)  = '<> <> <> s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s <>'
(?<!\b) = '<> <> <> s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s <>'
(?!\B)  = '   <>ssssssssssssss<> '
(?<!\B) = '   <>ssssssssssssss<> '=======================================
Perl 5.20

\b      = '   <>ssssssssssssss<> '
\B      = '<> <> <> s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s '
(?!\b)  = '<> <> <> s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s <>'
(?<!\b) = '<> <> <> s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s <>'
(?!\B)  = '   <>ssssssssssssss<> '
(?<!\B) = '   <>ssssssssssssss<> '

========================================
Boost 1.64

\b      = '   <>ssssssssssssss<> '
\B      = ' <> <> s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s '
(?!\b)  = '<> <> <> s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s <>'
(?<!\b) = '<> <> <> s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s <>'
(?!\B)  = '<>   <>ssssssssssssss<> <>'
(?<!\B) = '<>   <>ssssssssssssss<> <>'

=====================================
JavaScript

\b      = '   <>ssssssssssssss<> '
\B      = '<> <> <> s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s <>'
(?!\b)  = '<> <> <> s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s <>'
(?!\B)  = '   <>ssssssssssssss<> '

-1

Решение

Ошибка была исправлена ​​в версии Perl, выпущенной после той, которую вы использовали.

$ perl -le'print $^V'
v5.20.1

$ for re in '\b' '\B' '(?!\b)' '(?<!\b)' '(?!\B)' '(?<!\B)' ; do
>    perl -e'printf "%-7s = %s\n", $ARGV[0], "   ssssssssssssss " =~ s/$ARGV[0]/<>/rg' \
>       "$re"> done
\b      =    <>ssssssssssssss<>
\B      = <> <> <> s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s
(?!\b)  = <> <> <> s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s <>
(?<!\b) = <> <> <> s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s <>
(?!\B)  =    <>ssssssssssssss<>
(?<!\B) =    <>ssssssssssssss<>

$ perl -le'print $^V'
v5.22.0

$ for re in '\b' '\B' '(?!\b)' '(?<!\b)' '(?!\B)' '(?<!\B)' ; do
>    perl -e'printf "%-7s = %s\n", $ARGV[0], "   ssssssssssssss " =~ s/$ARGV[0]/<>/rg' \
>       "$re"> done
\b      =    <>ssssssssssssss<>
\B      = <> <> <> s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s <>
(?!\b)  = <> <> <> s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s <>
(?<!\b) = <> <> <> s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s<>s <>
(?!\B)  =    <>ssssssssssssss<>
(?<!\B) =    <>ssssssssssssss<>

Версия Boost не только отличается; это не кажется самосогласованным.

4

Другие решения

Других решений пока нет …