2014-11-05 58 views
0
var x = "SomeText&nbsp;<a href=\"http://g.com\">http://g.com</a>"; 
var y = x.replace(/<a href="([^"]+)">([^<]+)<\/a>/igm, ('$2' == '$1')?"t":"f"); 

比较返回false。而现在y是“SomeText   f”。 如何比较并得到“SomeText   t”?我在这种情况下错过了什么吗?javascript正则表达式中的反向引用的比较

同时打印两个引用会打印相同的字符串。

var y = x.replace(/<a href="([^"]+)">([^<]+)<\/a>/igm, '($2)($1)') 

这将为后面的引用输出相同的url。

回答

1

JS只会对$1$2这样的字符串做任何特殊处理的唯一时间是它作为结果字符串的一部分传递给.replace()的第二个参数。

你有什么'$2' === '$1'if the string "$2" is the same as the string "$1",这显然总是假的。

相反,您可以使用.match()方法将各种反向引用作为可以编入索引的数组。

尝试以下操作:

var x = "SomeText&nbsp;<a href=\"http://g.com\">http://g.com</a>"; 
var regex = /<a href="([^"]+)">([^<]+)<\/a>/igm; 
var matches = x.match(regex); 
var y = x.replace(regex, matches[2] == matches[1]?"t":"f"); 
+0

喔确定..所以假设x变量与文本一起多个环节,我们需要与之相匹配的()一次应用正则表达式来让所有的反向引用,然后用计数器,然后使用替换功能.. 这有助于..谢谢格雷格。 – kameswarib 2014-11-05 05:59:25

+0

如果您需要为替换字符串以外的任何目的获取反向引用的值,则需要使用'string.match(regex)'或'regex.exec(string)'来获取伪阵列的结果,其中元素'[0]'是由正则表达式匹配的完整字符串,'[1]'是反向引用#1的匹配(如果有的话,如果不匹配则为空/未定义)。 – GregL 2014-11-05 06:13:01

+0

对于任何具有href属性和内部文本作为相同链接的链接,我们希望以不同的模式显示它。对于所有其他链接,我们将使用不同的模式。因此,使用替换函数。但是,这看起来像是不可能的。如果我们在字符串中有多个链接,我们将无法检查每个链接的href属性和链接文本的相等性,并用正确的格式进行替换。 – kameswarib 2014-11-05 06:26:09