我在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>
答案 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"';