正则表达式从<link />标签以外的标签获取href链接

时间:2015-02-13 10:28:52

标签: javascript regex node.js

我在javascript变量中有一段文本,其中包含多个锚点,区域和链接标记。我想用其他链接替换除链接标记之外的所有href链接。例如,我当前的正则表达式匹配所有不包含的href(mailto :)和(abc-url)

var r_domain = 'testlink.com';
var s = 'someencryptedstring';

var pattern = /href[\s]*=[\s]*('|")(?!mailto:)(?!#)((?:(?!\abc-url\b)[^('|")])*)('|")/ig;

var replace_pattern = 'href=\"http://'+r_domain+'/link.php?str='+s+'&mailin-url=$2"';

var body = '<a href="http://example.com" >abc</a> test data <a href="http://test.com/test.php?str=someencryptedstring&abc-url=http://cdf.com" > link </a> test last <link rel="stylesheet" href="http://csslink.com/forms.css" type="text/css" media="screen, projection" />  area test <a href="http://example_1.com" > xyz </a>';

var re      = new RegExp(pattern);
var replaced  = body.replace(re , replace_pattern);
console.log(replaced);

它应该只替换以下链接:

href="http://example.com"
href="http://example_1.com"

不应取代以下链接:

href="http://test.com/test.php?str=someencryptedstring&abc-url=http://cdf.com"
href="http://csslink.com/forms.css"

输出应如下所示(console.log(替换);):

<a href="http://testlink.com/link.php?str=someencryptedstring&mailin-url=http://example.com" >abc</a> test data <a href="http://test.com/test.php?str=someencryptedstring&abc-url=http://cdf.com" > link </a> test last <link rel="stylesheet" href="http://csslink.com/forms.css" type="text/css" media="screen, projection" />  area test <a href="http://testlink.com/link.php?str=someencryptedstring&mailin-url=http://example_1.com" > xyz </a>

1 个答案:

答案 0 :(得分:0)

我已经更改了模式和replace_pattern的正则表达式,并保持其他脚本不变。它对我来说很好。

模式和replace_pattern的新正则表达式如下:

var pattern = /(<(a|area) [^>]*)href[\s]*=[\s]*('|")(?!mailto:)(?!#)((?:(?!\abc-url\b)[^('|")])*)('|")/ig;

var replace_pattern = '$1href=\"http://'+r_domain+'/link.php?str='+s+'&mailin-url=$4"';