执行非贪婪的正则表达式匹配javascript

执行非贪婪的正则表达式匹配javascript,javascript,Javascript,我的输入字符串类似于: var someString = 'This is a nice little string with <a target="_" href="/carSale/12/..">link1</a>. But there is more that we want to do with this. Lets insert another <a target="_" href="/carSale/13/..">link2</a> '

我的输入字符串类似于:

var someString = 'This is a nice little string with <a target="_" href="/carSale/12/..">link1</a>. But there is more that we want to do with this. Lets insert another <a target="_" href="/carSale/13/..">link2</a> ';
var someString='这是一个很好的小字符串。但我们还想做更多的事情。让我们插入另一个';
我的最终目标是匹配每一个在href属性中有“carSale”的锚元素,并将其替换为锚中的文本

for e.g
Replace <a target="_" href="/carSale/12/..">link1</a>  with string    link1

but it should not replace 
<a target="_" href="/bikeSale/12/..">link3</a> 
,例如
替换为字符串link1
但它不应该取代
因为上面的href不包含字符串“carSale”

我已经为此创建了一个正则表达式对象。但它似乎在进行一场贪婪的比赛

var regEx = /(<a.*carSale.*>)(.*)(<\/a>)/;

var someArr = someString.match(regEx);

console.log(someArr[0]);
console.log(someArr[1]);
console.log(someArr[2]);
console.log(someArr[3]);
var regEx=/(

我不确定您的匹配组是什么,但这个表达式如何:

/^<a.*href="((?:.*)carSale(?:.*))".*>(.*)<\/a>$/

我不确定您的匹配组是什么,但这个表达式如何:

/^<a.*href="((?:.*)carSale(?:.*))".*>(.*)<\/a>$/

我不确定您的匹配组是什么,但这个表达式如何:

/^<a.*href="((?:.*)carSale(?:.*))".*>(.*)<\/a>$/

我不确定您的匹配组是什么,但这个表达式如何:

/^<a.*href="((?:.*)carSale(?:.*))".*>(.*)<\/a>$/
或者这个:

/()(.*)()/

使中继器不贪婪,因此它吃得尽可能少,而
*
的默认行为是吃得尽可能多。因此,添加了
后,
(.*)
将在第一个
处停止,而不是最后一个或这一个:

(<a[^>]*(href=\"([^>]*(?=carSale)[^>]*)\")[^>]*>)([^<]*)(<\/a>)*
/()(.*)()/

使中继器不贪婪,因此它吃得尽可能少,而
*
的默认行为是吃得尽可能多。因此,添加了
后,
(.*)
将在第一个
处停止,而不是最后一个或这一个:

(<a[^>]*(href=\"([^>]*(?=carSale)[^>]*)\")[^>]*>)([^<]*)(<\/a>)*
/()(.*)()/

使中继器不贪婪,因此它吃得尽可能少,而
*
的默认行为是吃得尽可能多。因此,添加了
后,
(.*)
将在第一个
处停止,而不是最后一个或这一个:

(<a[^>]*(href=\"([^>]*(?=carSale)[^>]*)\")[^>]*>)([^<]*)(<\/a>)*
/()(.*)()/


使中继器不贪婪,因此它吃得尽可能少,而
*
的默认行为是吃得尽可能多。因此,添加了
后,
(.*)
将在第一个
而不是最后一个
(]*(href=\“([^>]*(?=carSale)[^>]*)\”[^>])\”[^>>)\“[^>>”[^>>)([^
([^>](href=\“([^>]*(?=carSale)[^>]*)\”[^>]*”([^
(]*(href=\”([^>]*((?=carSale)[^>]*)\([^
([^>]*(?=carSale)[^>]*)\[^>])[^>>)\[^>>)*)([^与其使用正则表达式,不如在本机浏览器中使用本机解析器,更不易受bug影响

(<a[^>]*(href=\"([^>]*(?=carSale)[^>]*)\")[^>]*>)([^<]*)(<\/a>)*
var div = document.createElement("div");
div.innerHTML = someString;

// Get links
var links = div.querySelectorAll("a");
for (var i = 0; i < links.length; ++i) {
    var a = links[i];
    // If the link contains a href with desired properties
    if (a.href.indexOf("carSale") >= 0) {
        // Replace the element with text
        div.replaceChild(document.createTextNode(a.innerHTML), a);
    }
}
var div=document.createElement(“div”);
div.innerHTML=someString;
//获取链接
var links=div.queryselectoral(“a”);
对于(变量i=0;i=0){
//用文本替换元素
div.replaceChild(document.createTextNode(a.innerHTML),a);
}
}

但是,如果您确信您的html将始终遵循正则表达式指定的模式,那么您可以使用它

与其使用正则表达式,不如使用解析器。这不会像在浏览器中那样容易中断,而是使用本机(本机)解析器,因此不易受到bug的影响:

var div = document.createElement("div");
div.innerHTML = someString;

// Get links
var links = div.querySelectorAll("a");
for (var i = 0; i < links.length; ++i) {
    var a = links[i];
    // If the link contains a href with desired properties
    if (a.href.indexOf("carSale") >= 0) {
        // Replace the element with text
        div.replaceChild(document.createTextNode(a.innerHTML), a);
    }
}
var div=document.createElement(“div”);
div.innerHTML=someString;
//获取链接
var links=div.queryselectoral(“a”);
对于(变量i=0;i=0){
//用文本替换元素
div.replaceChild(document.createTextNode(a.innerHTML),a);
}
}

但是,如果您确信您的html将始终遵循正则表达式指定的模式,那么您可以使用它

与其使用正则表达式,不如使用解析器。这不会像在浏览器中那样容易中断,而是使用本机(本机)解析器,因此不易受到bug的影响:

var div = document.createElement("div");
div.innerHTML = someString;

// Get links
var links = div.querySelectorAll("a");
for (var i = 0; i < links.length; ++i) {
    var a = links[i];
    // If the link contains a href with desired properties
    if (a.href.indexOf("carSale") >= 0) {
        // Replace the element with text
        div.replaceChild(document.createTextNode(a.innerHTML), a);
    }
}
var div=document.createElement(“div”);
div.innerHTML=someString;
//获取链接
var links=div.queryselectoral(“a”);
对于(变量i=0;i=0){
//用文本替换元素
div.replaceChild(document.createTextNode(a.innerHTML),a);
}
}

但是,如果您确信您的html将始终遵循正则表达式指定的模式,那么您可以使用它

与其使用正则表达式,不如使用解析器。这不会像在浏览器中那样容易中断,而是使用本机(本机)解析器,因此不易受到bug的影响:

var div = document.createElement("div");
div.innerHTML = someString;

// Get links
var links = div.querySelectorAll("a");
for (var i = 0; i < links.length; ++i) {
    var a = links[i];
    // If the link contains a href with desired properties
    if (a.href.indexOf("carSale") >= 0) {
        // Replace the element with text
        div.replaceChild(document.createTextNode(a.innerHTML), a);
    }
}
var div=document.createElement(“div”);
div.innerHTML=someString;
//获取链接
var links=div.queryselectoral(“a”);
对于(变量i=0;i=0){
//用文本替换元素
div.replaceChild(document.createTextNode(a.innerHTML),a);
}
}

但是,如果您确信您的html将始终遵循正则表达式指定的模式,那么您可以使用它

一个诡辩:“本机解析器”不是JavaScript语言的一部分;它是特定web客户机集成的一部分。@Dan是的,但我的观点是有些东西可能很容易破坏他的正则表达式,因为它[正则表达式]必须变得相当复杂,才能处理所有可能的
A
标记变体