我正在使用正则表达式查找来自Google日历XML Feed的链接,该链接显示在表单中:
<a href="http://www.drsketchysdublin.com/event-registration/?ee=11">http://www.drsketchysdublin.com/event-registration/?ee=11</a>
我想用
替换它<a href="http://www.drsketchysdublin.com/event-registration/?ee=11">drsketchysdublin</a>
我正在使用以下正则表达式匹配文本:
expression = //(<a\shref="https?[^>]+>(https?:\/\/www\.([^\.]+)\.com[^<]+)<\/a>)/ig;
然后使用
进行替换return element.html( element.text().replace(expression, "<a href='$1' target='"+options.target+"'>$2</a>") );
我希望$ 1为
的值(https?:\/\/www\.([^\.]+)\.com[^<]+)<\/a>)
和$ 2是
的值([^\.]+)
我正在使用此处的代码http://gabrielizaias.com/articles/jquery-urltolink-plugin/
如何从正则表达式引用两个返回的值?我尝试过像[0]这样的东西,但没有运气。
答案 0 :(得分:0)
您可以使用函数作为替换的第二个参数。此函数允许表达式中的参数。参数是(完全匹配,[捕获项目],匹配偏移,原始字符串)。您可以在此功能中拥有多个捕获项。一个简单的例子:
var testItem = 'test1@test2';
var expression = new RegExp(/^([^@]+)@([^@]+)$/)
var returnItem = testItem.replace(expression, function(full_match, $1, $2, offset, original){
console.log('full match: '+full_match)
console.log('$1: '+$1)
console.log('$2: '+$2)
console.log('offet: '+offset)
console.log('original: '+original)
return (typeof $1 != "undefined" && typeof $2 != "undefined") ? $1+','+$2 : false;
});
if (returnItem !== false) console.log(returnItem.split(','))
else console.log('bad return value');
该片段声明了一个简单的字符串,一个表达式,用于抓取@符号两侧的项目,然后使用replace函数在解析后返回两个匹配的项目。控制台登录返回功能是为了演示每个变量所持有的内容。运行上面的代码后,我收到了以下输出:
full match: test1@test2
$1: test1
$2: test2
offet: 0
original: test1@test2
["test1", "test2"]
您可以使用此方法通过一个小修改来解析正则表达式的返回值。 我的示例代码有一个问题:我的返回是使用逗号分割来创建数组。如果您的内容中包含逗号,则无效。
这对您来说不是问题,您可以使用以下内容:
var temp = '<a href="http://www.drsketchysdublin.com/event-registration/?ee=11">http://www.drsketchysdublin.com/event-registration/?ee=11</a>'
var expression = /<a\shref="https?[^>]+>(https?:\/\/www\.([^\.]+)\.com[^<]+)<\/a>/ig;
var options = {target : 'blank'}
console.log(temp.replace(expression, function(full_match, $1, $2, offset, original){ return '<a href="'+$1+'" target="'+options.target+'">'+$2+'</a>';}))
稍微更改一下变量(并将控制台日志更改为返回程序),你应该没问题。 请注意,我从你的正则表达式中删除了一组括号,它们似乎没有被用于任何东西,所以我放弃了它们。如果您对使正则表达式更加通用有任何疑问,请告诉我。