Javascript 字符串匹配

Javascript String Matching

本文关键字:串匹配 字符串 字符 Javascript      更新时间:2023-09-26

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

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

"源代码"有点像内部HTML插入,但我已经记下来了。

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

所以

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

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

嗯,[^R$]匹配"恰好是一个既不是R也不是$的角色",所以这可能不是你想要的。

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.");
}
var source = '>R$11111</b>';
var price = source.match(/R'$('d+)<'/b>/);
if (price)
    console.log(price[1]); // 11111

这是一个非正则表达式解决方案,以防有人感兴趣:

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

演示