
正規表現の特殊文字\bとは
JavaScript正規表現の特殊文字\bは単語区切りにマッチします。
正規表現\bの「単語区切り」をスペースだけのことだと勘違いしている人が多いがこれは間違い。
確かにThis pen is mine.という文字列は/\bpen\b/にマッチします。
しかし、/\bpen\b/はI have a pen.という文字列のpenにもマッチするのです。
これは「.」「!」「?」も\bの単語区切りのため。ちなみに全角や絵文字の「!」「?」も単語区切りとなる。
var p = prompt(
`文字列を入力してください。
/\bpen\b/にマッチするかテスト
例: This is a pen.`
);
if (/\bpen\b/.test(p)) {
alert(`Match! ${p}`);
} else {
alert(`Unmatch... ${p}`);
}
JavaScriptでは日本語も単語区切りになる
JavaScript以外の言語では日本語は単語区切りにならないが、JavaScriptでは日本語も単語区切りになる。
例えば/A\b/は他の言語なら「Aクラス」をマッチしないがJavaScriptだとマッチしてしまう。
JavaScript
var p = prompt(
`文字列を入力してください。
/A\b/にマッチするかテスト
例: Aクラス`
);
if (/A\b/.test(p)) {
alert(`Match! ${p}`);
} else {
alert(`Unmatch... ${p}`);
}
Perl
use v5.22;
say "文字列を入力してください。
\/A\\b\/にマッチするかテスト
例: Aクラス";
while(<>) {
if (/(A\b)/) {
say "Match! $_";
} else {
say "Unmatch... $_";
}
}
アクセント付き文字も単語区切り
JavaScript以外の言語ではアクセント付き文字は単語区切りにならないが、JavaScriptではアクセント付き文字も単語区切りになってしまう。
アクセント付き文字とはéのようにアクセント(アキュート)を付与した文字でフランス語、スペイン語などで使用される。
例えば/caf\b/とした場合、「cafe」にはマッチしないが「café」にはマッチしてしまう。
JavaScript
var s1 = 'cafe';
var s2 = 'café';
function regTest(str) {
if (/caf\b/.test(str)) {
console.log(`Match! ${str}`);
} else {
console.warn(`Unmatch... ${str}`);
}
}
regTest(s1);
// => Unmatch... cafe
regTest(s2);
// => Match! café
Perl
use v5.22;
say "文字列を入力してください。
\/caf\\b\/にマッチするかテスト
例: café";
while(<>) {
if (/(caf\b)/) {
say "Match! $_";
} else {
say "Unmatch... $_";
}
}


