私の目標は、特定のclass="..."
スタイルの<span>
タグに女性の名詞(ドイツ語)をラップして強調表示することです。JavaScript RegExp misbehaving
JavaScriptのRegExでは、私は(残念なことに)「単語境界」\b
を使用できませんので、私は単語境界として明示的に列挙することによって即興化を余儀なくされています。
私のコードは、(単純化および合理化された)次のようになります。
const wordBoundary = "(^|\\s|$|/|\\?|\\.|\\!|\\)";
"Liebe Grüße".replace(
new RegExp(`${wordBoundary}(Liebe|Grüße)${wordBoundary}`, "g"),
`<span class="nounF">$1$2$3</span>`
);
しかし、これが唯一の
<span class="nounF">Liebe </span>Grüße
を生産、最初の単語ではなく、秒を強調しています。
"Liebe Grüße".replace(
/(^|\\s|$|\/|\\?|\\.|\\!|\\)(Liebe|Grüße)(^|\\s|$|\/|\\?|\\.|\\!|\\)/g,
`<span class="nounF">$1$2$3</span>`
);
私の質問は次のとおりです。すべてが
<span class="nounF">Liebe</span> <span class="nounF">Grüße</span>
を生産、期待通りに動作します - I(偶然ほとんどが)もし代わりに、私は正規表現の初期化子を使用しRegExp
オブジェクトのことが判明コンソールで
デバッグ2つ折り:
RegExp
オブジェクトを作成し、インプレース正規表現初期化子を使用しないで何か間違っていますか? TBH- 私は正規表現の初期化子を使用する必要がある場合 - どのようにそのカスタム
wordBoundary
を提供するのですか?あなたは変数が再び${...}
であなたが失うことを再利用したときに(あなたのシナリオで)変数wordBoundary
が正しくがバックスラッシュをエスケープ(\\
)が含まれているためconst wordBoundary = "(^|\\\\s|$|/|\\\\?|\\\\.|\\\\!|\\\\)";
これは、しかし:
あなたは現在の単語境界記号に満足していますか?もしそうなら、 'new RegExp(\' $ {wordBoundary}(Liebe |Grüße)(?= $ | [/?。!\\ s])\ '、" g ")'を使用してください。または、 '$ {wordBoundary}'を '(?= $ {wordBoundary}) 'に置き換えてください。 –
LiebeとGrüßeの単語を事前に知っていれば、RegExpオブジェクトを作成することができます。 ? – Redu
これははるかに大きいコードの非常に短いバージョンです。 – YePhIcK