0

文章:

id="word1 word2 word3/343/els/425/word4 word5 word6"
wordA wordB Bword2B word1 word2 word3
blah blah blah

テキスト内の単語1、単語2、単語3の単語全体を一致させようとしていますが、テキストの行でそれらを一致させたくありませんid="word1 word2 word3/343/els/425/word4 word5 word6"。単語はラテン語ではありません。

現在のアプローチ:

var sWord = "word2";
text = text.replace( new RegExp(sWord+"(?!\/[0-9])", "gi"), "<span style='background-color: yellow'>"+sWord+"</span>");

このアプローチは、word1 または word2 ではなく、word3 に対してのみ機能します。そのため、NUMBER の前に別の単語がある可能性を正規表現にどのように導入すればよいでしょうか?

"(?!.\/[0-9])"

ドット「。」を追加しました。正規表現に。しかし、うまくいかないようです。

さらに、単語全体の一致の可能性を追加するにはどうすればよいですか? \b\Sは、単語がラテン語ではないため、機能しないようです。

前もって感謝します!

編集: jsfiddle http://jsfiddle.net/GLt4F/5/

ボタンが word1 と word2 で壊れているのがわかりますが、一致が正しいため、word3 では壊れていません。

EDIT2:

問題を言い換えると、BBB が続かない場合にのみ AAA に一致し、それらの間は何でもかまいません。例:

AAA frefe BBB は一致しませ
ん AAA BBB は 一致しません
AAA frefe cc は一致する必要があります

4

2 に答える 2

3
/AAA([\s\S](?!=BBB))*$/

するべきです。

さらに、単語全体の一致の可能性を追加するにはどうすればよいですか? \b と \S は、単語がラテン語ではないため、機能しないようです。

JavaScript には Unicode 互換モードがないため、単語 char に対して独自の文字セットを記述し、否定一致を使用する必要があります。

(?:^|[^A-Za-z0-9_$])

AAA の前にあり、JS には後読みがないため、前の単語以外の文字はキャプチャされたグループ 0 の一部になります。

于 2013-01-02T14:31:08.837 に答える
0
(?!(.*)\/[0-9])

これはうまくいくようです(何かが間にあるときに一致しないためです。抜け穴があるかどうか、またはそれが確かな答えであるかどうかはわかりません。

于 2013-01-02T14:38:14.777 に答える