Javascript替换regex剪切结果
Javascript replace regex cuts result
我已经尝试用一个相当复杂的正则表达式来解决一些简单的问题,比如用新内容替换长字符串的部分。任务是替换从其他地方提供的html中的超链接,并在输出之前通过自定义函数传递超链接。
function replaceHyperlinks(html){
if(!source) return "";
var str = source;
// Modify <a> tag
str = str.replace(/<a.*href="(.*?)".*>(.*?)<'/a>/gi, "<a onclick='"javascript:openURL('$1')'" href='"#'">$2</a>");
return str;
}
更换工作似乎有条不紊。问题是,它只在第一场比赛中这样做,然后突然结束,第一场比赛后还会扔掉绳子的任何剩余部分。
我环顾四周,但从我所见,似乎没有人有这个问题。。。
您必须确保在每一次匹配中都使用"?",否则它会贪婪地匹配所有内容。
/<a.*href="(.*?)".*>(.*?)<'/a>/gi
有".*"而没有"?"会导致它吃掉模式的第一个和最后一个实例之间的所有内容。
拿这个:
<a href="/main">Main</a> bunch of text or something <a href="/whatever">whatever</a>
现在,将其与该表达式匹配,添加括号显示匹配内容:
text = '<a href="/main">Main</a> bunch of text or something <a href="/whatever">whatever</a>'
text.match(/<a(.*)href="(.*?)"(.*)>(.*?)<'/a>/i)
[
"<a href="/main">Main</a> bunch of text or something <a href="/whatever">whatever</a>",
" href="/main">Main</a> bunch of text or something <a ",
"/whatever",
"",
"whatever"
]
忽略数组中的第一项,因为它是整个匹配项。第二项是第一组父母的火柴,你可以看到它抓得太多了。
text.match(/<a(.*?)href="(.*?)"(.*?)>(.*?)<'/a>/i)
["<a href="/main">Main</a>", " ", "/main", "", "Main"]
这就是你想要匹配的。
相关文章:
- Regex模式匹配,从Javascript中的字符串中提取时间,结果出乎意料
- 将Javascript Regex结果转换为字符串(?)
- JavaScript Regex在执行后会有不同的结果
- Regex exec函数在Javascript中未返回正确的结果
- 如何使用regex在以前的搜索结果中进行搜索和替换
- Javascript:如何在RegEx .exec结果中获取多个匹配项
- 使用/../时的不同结果以及RegEx与exec
- java脚本regex.match只查找一个结果
- Javascript替换regex剪切结果
- 根据RegEx模式筛选结果
- regex.test()函数没有给出正确的结果
- JavaScript Regex:记住一个匹配而不会得到“未定义”的结果
- Javascript通配符regex搜索结果不一致
- Regex JavaScript字符串并将结果存储到变量中
- Regex在javascript与组意外结果
- Javascript RegEx在结果上添加逗号
- Regex for date的计算结果为true,即使字符错误
- 在为字符串创建自定义regex-camelCase解决方案时,Javascript错误的结果
- Firefox 3.6.20 regex给出不一致的结果
- regex的意外结果