0

私は、gローブフラグを削除すると、余分なものと一致するというこのコードを持っていますfox

var str = "...brown #fox jumped...";

var arr1 = str.match(/#([^\s]+)/g); //["#fox"]
var arr2 = str.match(/#([^\s]+)/); //["#fox", "fox"]

console.log(arr1.join(", ")); //#fox
console.log(arr2.join(", ")); //#fox, fox

(コードのソース)

デモ

私は何が起こっているのか見当がつかない、私を啓発するものは何でも大歓迎です

4

2 に答える 2

4

最初の項目は、正規表現全体に一致する文字列です。次のすべての項目は、中括弧内の一致の対応する値です(...)

PS:次[^\s]のように書くことができます[\S]

于 2012-05-17T02:11:33.243 に答える
2

2番目foxは実際には一致しません。キャプチャされたグループです。デフォルトでは、括弧はキャプチャグループを作成します。したがって、あなたの例でfoxは、は括弧内で一致するものであり、#foxは全体の一致です。

キャプチャグループなしで正規表現を作成するには、次のようにします。

#\S+

次の構文を使用して、キャプチャしないグループを指定することもできます。

#(?:\S+)

グローバルフラグが設定されている場合、文字列一致関数はキャプチャされたグループを取得しないため、グローバルフラグはキャプチャグループのキャプチャを妨げました。この質問と回答で説明されているように、Regexexec関数はキャプチャグループを取得します。

于 2012-05-17T02:20:22.413 に答える