0

ハッシュタグをプロジェクトに一致させる正規表現を作成しています。単一のスペースで区切られた正規表現一致ハッシュタグが必要であり、このコンテンツ内に別のハッシュタグを持たず、文字列内のスペースに一致するだけで、その後に任意の単語が続く場合(他の空白または # を除く)。

正規表現で「if」のようなことができるかどうか知りたいのですが、これで私を助けてくれることを願っています.

したがって、次のようになります。

"#hashtag?!-=_"  "#hashhash#"  "#hash tag"  "#hash  tag"  "#hash #ahuhuhhuasd" "#hash "

正規表現は、次の文と一致する必要があります。

"#hashtag?!-=_" "#hashhash" "#hash tag" "#hash" "#hash #ahuhuhhuasd" "#hash"
                            (all hashtag)        (one)  (another h.)

実際、これは私のコードです:

#{1,1}\S+\s{0,1}

ここでこのコードをテストできますが、望ましくないものと一致します。

"#ahusdhuas?!__??###hud #ahusdhuads "  
The blank space in the end of the string, the 3 '#' inside the string. 
none of the following content is desired in this string, just "#ahusdhuas?!__??"

あなたが私を助けることができればうれしいです!

4

5 に答える 5

1

これを標準のHTMLページとFirebugでも試してみました...

あなたが与えた入力に対して動作します。

var hashTags = ["#hashtag?!-=_", "#hashhash#", "#hash tag", "#hash  tag", "#hash #ahuhuhhuasd", "#hash ", "#hash #", "#foo bar baz"];
hashTags.forEach(function(el, idx, arr) {
    console.log( el.match(/#([^#\s]|(( [^\s])(?!\s|$)))+/g));
});

// Console output
> ["#hashtag?!-=_"]
> ["#hashhash"]
> ["#hash tag"]
> ["#hash"]
> ["#hash #ahuhuhhuasd"]
> ["#hash"]
> ["#hash"]
> ["#foo bar baz"]
于 2013-10-07T13:22:42.457 に答える
1

私はPythonしか使っていないのでJavascriptの正規表現に慣れていませんが、理解できたと思います。
Monty Wild から提供されたサイトregexpal.comで以下をテストしました。すべての部分文字列が一致したことを示したのはこのサイトだけです。

(?:^ |^| )(#[^#\s]+(?: [^#\s]+)?)(?:(?=\Z| \Z| \S)| +(?=#))

結果

#hashtag?!-=_
#hash tag
#hash
#ahuhuhhuasd
#hash

Javascript の正規表現は後読みアサーションを受け入れないため、2 つ以上の空白が先行するハッシュタグが一致しないようにするためのトリックを使用しました: これらの先行する空白は、先行する一致の後続の空白として正規表現マシンによって消費されます:正規表現の最後の部分+(?=#)の役割は、一致する末尾の空白が複数ある場合にそのような一致をトリガーすることです。(?=\Z| \Z| \S)この消費は、前の部分が一致しなかった場合にのみ介入します

于 2013-10-06T23:25:11.470 に答える
1

これが必要だと思います:

(#(?:\s?[^#\s]+)+)

ここにいくつかのテストがあります:

ここに画像の説明を入力

于 2013-10-06T22:13:30.383 に答える