1

これは私がこれまでに得たものです:

var source = '>R$11111</b>';
var price = source.match(/[^R$]\d+/);

'source'はinnerHTML挿入の少しですが、私はそれを理解しています。

問題は、「価格」は、1から無限大までの間にある必要があります'R$''</b>'私がそこに持っているものはうまくいくでしょう、しかし私がそれを取り出したり取り出し'R$'たり'</b>'するとき、それはまだ価値と余分なキャラクターを見つけます。

だから基本的に私はそれを作るのに助けが必要なので、両方が存在するとき'R$'との間の値だけを拾います。'</b>'

***またはR$から文字列の終わりまで。しかし、R$と価格の間にスペースはありません。

4

3 に答える 3

4

まあ、 「でもなく」でも[^R$]ない正確に1文字に一致するので、それはおそらくあなたが望むものではありません.R$

var price = source.match(/R\$(\d+)/)[1];

または、価格がすべての桁ではない場合:

var price = source.match(/R\$(.*?)<\/b>/)[1];

重要なのは、関心のある部分を括弧で囲むことです。これにより、括弧の間にあるものと一致するテキストは、配列の 2 番目の要素として一致の戻り値に含まれます (最初の要素は、正規表現全体に一致します)。

文字列が正規表現と一致しない可能性がある場合は、次の 2 つの手順で行うことをお勧めします。

var match = source.match(/whichever/);
if (match) {
    price = match[1]; 
} else {
    console.log("no price found.");
}
于 2012-05-25T02:04:14.697 に答える
1
var source = '>R$11111</b>';
var price = source.match(/R\$(\d+)<\/b>/);

if (price)
    console.log(price[1]); // 11111
于 2012-05-25T02:02:34.000 に答える
0

誰かが興味を持っている場合に備えて、正規表現以外のソリューションを次に示します。

function getPrice(str, start, end){
    var first = str.indexOf(start),
        last = str.lastIndexOf(end);

    return ~first ?
                str.slice(first + start.length, (~last ? last : str.length))
                    .replace(/^\s+/, "")
            :
                str;
}

var source = "...R$  21112</b>...";

console.log(getPrice(source, "R$", "</b>")); //"21112"
console.log(getPrice(source, "R$", "nomatch")); //"21112</b>..."
console.log(getPrice(source, "nomatch", "</b>")); //"...R$  21112</b>..."

デモ

于 2012-05-25T03:31:07.837 に答える