0

私は次のような文字列を持っています

<dt>Source:</dt>
<dd>
    Emergence: Title; 2005, Vol. 9 Issue 30, p120-203, 12p
</dd>

今、私はそれに対して異なる値をフェッチする正規表現です。つまり、ボリューム、発行、日付などです。したがって、テキスト全体をフェッチします。

var attr = jQuery("dl dt:contains('Source:') ~ dd:eq(0)").text();

また、正規表現を使用して、次のようなさまざまな値をフェッチします。

私が使用するスタートページを取得するには、正規表現に従ってください。

var regex = new RegExp("p\\d+(?=[-\\s]{1})");

var regexValPS = attr.match(regex);

戻り値:p120、期待値:120

同様に、ボリューム情報を取得するには、次の正規表現を使用します。

var regexVol = new RegExp("Vol.\\s\\d+");
var regexValVol = attributeVal.match(regexVol);

私が得る:Vol。9、欲しい:9

同様に、「Issue」テキストで問題番号を取得しています。

var regEx = new RegExp("Issue\\s\\d+");
var regExVal = attributeVal.match(regEx);

代わりに: 30を取得する必要があります: Issue 30

問題は、別の正規表現を使用して目的の値を取得できないこと、strip / parseIntなどができないこと、およびパターンが単一の正規表現で情報をフェッチできる必要があることです。

4

4 に答える 4

1

私があなたを正しく理解していれば、呼び出しによって返された文字列値をさらに解析する必要はありませんが.match()、1つのステートメントで必要な値を返す場合は、別の正規表現を受け入れることができます。

正規表現には()、目的の数値を取得して配列インデックスに配置するためのキャプチャグループが必要です[](最初のインデックス[0]は一致した文字列全体を保持し、後続のインデックスは()キャプチャされたサブ文字列を保持します)。

この場合、代わりにnew RegExp()単純な/pattern/正規表現リテラルを使用でき、すべての場合に1つのステートメントで目的の値を抽出できます。

var yourString = '<dt>Source:</dt>\
<dd>\
    Emergence: Title; 2005, Vol. 9 Issue 30, p120-203, 12p\
</dd>';

// Match the page, captured in index [1]
yourString.match(/p(\d+)(?=[-\s]{1})/)[1];
// "120"

// Match the Vol captured in index [1]
yourString.match(/Vol\.\s(\d+)/)[1];
// "9"

// Match the issue captured in index [1]
yourString.match(/Issue\s(\d+)/)[1];
// "30"

これはjsfiddleにあります

于 2012-11-30T13:59:34.650 に答える
1

単一の正規表現を使用して目的の情報を取得するには、正規表現のグループ化を利用する必要があります。

var regEx = new RegExp("Issue\\s(\\d+)");
var regExVal = attributeVal.match(regEx)[1];

正規表現を変更できない場合は、結果の数値を解析できます。

var number = "Issue 30".replace(/\D/g, '');
于 2012-11-30T13:55:21.207 に答える
1

グループ化を使用(...)して、その一致を読み取ります»

デモ:

var str = "Emergence: Title; 2005, Vol. 9 Issue 30, p120-203, 12p";
var re = /p(\d+)(?=[\-\s])/;
document.writeln(re.exec(str)[1]); // prints: 120
re = /Vol\.\s(\d+)/;
document.writeln(re.exec(str)[1]); // prints: 9

ここでテストしてください

于 2012-11-30T14:12:38.453 に答える
0

これを試して:

var attr = jQuery("dt:contains('Source:') ~ dd:eq(0)").text();
console.log(attr);
console.log(attr.match(/p(\d+)(?=[-\s]{1})/)[1]);
console.log(attr.match(/Vol\.\s(\d+)/)[1]);
console.log(attr.match(/Issue\s(\d+)/)[1]);

詳細については、.MATCH()で使用するJQUERY正規表現の例を参照してください。

于 2012-11-30T14:27:24.560 に答える