0

このスクリプトを使用して、文の最後の単語を変更します。

$div = $('.cPageHeader h2');
$div.html($div.text().replace(/(\w+?)$/, '<span class="cOrange">$1</span>'));

特別な文字が含まれていない限り、これはうまく機能します。

ハイライトのようなヘッダーがあるとすぐに、うまくいきませ<h2>International fancy stüff</h2>ん。ff のみが強調表示されます。行末に char の 1 つがある場合、同じエラーが発生します(!-.?)

アクセント付きの文字に関係なく、最後の単語全体 (句読点を含む) が強調表示されるように、誰かがスクリプトを変更できますか?

4

2 に答える 2

2

私はお勧めします:

$div = $('.cPageHeader h2');
$div.html($div.text().replace(/(\S+?)$/, '<span class="cOrange">$1</span>'));

JS フィドルのデモ

これは基本的に、文字列の末尾にある空白以外のすべての文字を探しますが、文字列が空白で終わっている場合は強調表示されません (念のため、最初に文字列をトリミングする価値があるかもしれません.

以下は上記を複製しますが、末尾の空白に対してもう少し寛容です:

var $div = $('#demo');
$div.html($div.text().replace(/\b(\S+?)(\b|(?:\s+))$/, '<span class="cOrange">$1</span>'));

JS フィドルのデモ

これは一致します:

  • \b: 単語境界;
  • \S+: 1 つまたは複数の非空白文字のシーケンス。
  • (\b|(?:\s+)): 別の単語境界、または1 つ以上の空白文字のシーケンス。

$1元の式の番号付き一致 (the ) は明らかに非推奨であるか、まもなく廃止されるため、もう一度更新します (ただし、その特定の記憶をバックアップするための参照が見つからないため、少し塩を加えてください)。代わりに関数を使用するには:

var $div = $('#demo');
$div.html($div.text().replace(/\b(\S+?)(\b|(?:\s+))$/, function(a){
    return '<span class="cOrange">' + a + '</span>';
}));

JS フィドルのデモ

参考文献:

于 2013-06-12T15:20:47.787 に答える
1

必要なのはこれだけです。

$div.text().replace(/(\S+)$/, '<span class="cOrange">$1</span>')

いずれにせよ、一致に末尾の句読点を含めたいので\w+、仕事に適したツールではありませんでした. üこのようにして、非 ASCII 文字を単語文字のように扱う必要がなくなります。

\S+?参考までに、文字列の最後まで一致しているため、 のような消極的な量指定子を使用しても意味がありません。この場合、それは間違いではなく、無意味です。

于 2013-06-12T16:07:33.657 に答える