1

这是我到目前为止所得到的:

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

'source' 有点像 innerHTML 插入,但我已经把它记下来了。

问题是“价格”必须介于'R$'和之间'</b>',无论它们之间是什么,从 1 到无穷大。我在那里得到的东西会起作用,但是当我从中取出'R$''</b>'从中取出时,它仍然会找到价值和额外的字符。

所以基本上我只需要帮助来制作它,所以它只会在两者都存在时'R$'和两者之间获取价值。'</b>'

***OR 从 R$ 到字符串的末尾。但 R$ 和价格之间没有空格。

4

3 回答 3

4

好吧,[^R$]匹配“恰好一个既不是 anR也不是 a 的字符$”,所以这可能不是你想要的。

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

或者,如果价格可能不是全数字:

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

重要的是您关心的部分周围的括号,这会导致与括号之间的内容匹配的任何文本都包含在匹配的返回值中,作为数组的第二个元素(第一个是文本的一部分)匹配整个正则表达式)。

如果字符串可能与正则表达式不匹配,那么最好分两步进行:

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

Here is a non-regex solution in case someone is interested:

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>..."

Demo

于 2012-05-25T03:31:07.837 回答