执行非贪婪的正则表达式匹配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
标记变体