yamachan Ajax/.NET/C# メモ

2007-02-19

[JS] 最後のwordを得る関数

もうひとつ、紹介し忘れていた関数がありました。 文字列を単語(word)単位で分割し、その最後のwordを返す関数です。

jp.rinco.lastWord = function(str) {
if (str == "") return "";
var s=str.replace(/(\s|\u3000)+/g,' ').split(' ');
return s[s.length - 1];
}

replace() に指定している "/(\s|\u3000)+/g" という正規表現(RegExp)が少し複雑かもしれません。 split()の事前処理として、タブや改行や全角スペースも半角スペースに変換しています。

正規表現について簡単に説明します。 もっとも単純な変換だと str.replace(/\s/, ' '); という感じになるでしょうか。

ただ"\s" だけでは全角スペースに対応できない様子なので、全角スペースのUnicode表記 "\u3000" と組み合わせて "\s|\u3000" という表記にします。

複数連続したスペースが含まれる場合があります。 そこでそれらをまとめ、1つの対象として処理するために、1回以上の繰り返し "+" を使用して "(\s|\u3000)+" という表記にします。

最後に追加される "/g" はよく使いますね。 一致する対象を全て処理するオプション、グローバルマッチングです。

文字列操作において、正規表現は非常に便利ですので、ぜひ活用してみてください。

2007/2/27 追記: jp.rincoオブジェクト へ移動