0

私は次のように、Google検索URLからURLを抽出するJavaScriptに取り組んでいます。

http://www.google.com/search?client=safari&rls=en&q=thisisthepartiwanttofind.org&ie=UTF-8&oe=UTF-8

現在、私のコードは次のようになっています。

var checkForURL = /[\w\d](.org)/i;
var findTheURL = checkForURL.exec(theURL);

私はこれをいくつかの正規表現テスターで実行しましたが、機能しているようですが、実際には、返される文字列は次のようになります。

thisisthepartiwanttofind.org,.org

では、そのトレーリング,.orgはどこから来ているのでしょうか?

私のパターンはそれほど堅牢ではないことは知っていますが、使用するより良いパターンを提案しないでください。特にこれで何が悪かったのか、アドバイスをお願いします。ありがとう!

4

3 に答える 3

1

正規表現グループでエスケープ.(DOT)する必要があり(.org)ます。そうしないと、任意の文字と一致します。したがって、正規表現は次のようになります。

/[\w\d]+(\.org)/

例のURLと一致させるには、次のようなものを使用できます。

https?://([0-9a-zA-Z_.?=&\-]+/?)+

または、このようなより正確なもの(必要に応じて適切な正規表現を選択する必要があります):

^https?://([0-9a-zA-Z_\-]+\.)+(com|org|net|WhatEverYouWant)(/[0-9a-zA-Z_\-?=&.]+)$
于 2012-08-05T17:44:25.967 に答える
1

を処理しない場合は、正規表現の括弧を削除してください.org(リテラルであるため、可能性は低いです)。@Markコメントに従って+、クラスの1つ以上の文字に一致するようにを追加し[\w\d]ます。また、私はドットをエスケープします:

var checkForURL = /[\w\d]+\.org/i;
于 2012-08-05T17:44:31.250 に答える
1

実際に取得しているのは、2つの結果の配列です。最初の結果は完全一致で、2番目の結果はparens(.org)を使用して定義したグループです。

と比べて:

/([\w\d]+)\.org/.exec('thisistheurl.org')
→["thisistheurl.org"、 "thisistheurl"]

/[\w\d]+\.org/.exec('thisistheurl.org')
→["thisistheurl.org"]

/([\w\d]+)(\.org)/.exec('thisistheurl.org')
→["thisistheurl.org"、 "thisistheurl"、 ".org"]

JS正規表現の.execの結果は、文字列の配列です。最初は完全一致であり、後続は、parensを使用して定義したグループを表します。正規表現に親がない場合、この配列には1つの要素(一致全体)しかありません。

于 2012-08-05T17:52:05.560 に答える