Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
链接和链接类的javascript正则表达式_Javascript_Regex - Fatal编程技术网

链接和链接类的javascript正则表达式

链接和链接类的javascript正则表达式,javascript,regex,Javascript,Regex,我需要用正则表达式收集javascript中文本以外的所有链接,将href的实际内容和链接的文本分开。因此,如果链接是 <a href="someplace/topics/us/john.htm" class="r_lapi">John Dow</a> 我想收集href和“John Dow”的内容 这些链接中包含class=“r\u lapi”,可以识别我正在寻找的链接。 我现在得到的是: var link_regex = new RegExp("/<

我需要用正则表达式收集javascript中文本以外的所有链接,将href的实际内容和链接的文本分开。因此,如果链接是

<a href="someplace/topics/us/john.htm" class="r_lapi">John Dow</a>

我想收集href和“John Dow”的内容

这些链接中包含class=“r\u lapi”,可以识别我正在寻找的链接。 我现在得到的是:

     var link_regex = new RegExp("/<a[^]*</a>/");
     var match = content.match(link_regex, 'i');
     console.log("match =", match );
var link\u regex=new RegExp(“/如果您可以使用DOM(您说过您想要regex,但是…)

,使用通过ajax返回的JSON:

<a href="someplace/topics/us/john.htm" class="r_lapi">John Dow</a>
<a href="foo">Don't pick me</a>
<a href="blahblahblah" class="r_lapi">Jane Bloggs</a>
{
    "htmlList": [
        "blah blah <a href=\"someplace/topics/us/john.htm\" class=\"r_lapi\">John Dow</a> blah blah",
        "<a href=\"foo\">Don't pick me</a>",
        "Two in this one <a href=\"blahblahblah\" class=\"r_lapi\">Jane Bloggs</a> and <a href=\"blahblahblah\" class=\"r_lapi\">Trevor Bloggs</a>"
    ]
}
{
“htmlList”:[
“废话废话废话”,
"",
“这一个有两个”
]
}

如果您确实需要使用正则表达式:

请注意,无法使用JavaScript中的正则表达式可靠地执行此操作;您需要一个解析器

你可以通过几个假设来接近

 var link_regex = /<a(?:>|\s[^>]*>)(.*?)<\/a>/i;
 var match = content.match(link_regex);
 if (match) {
     // Use match[1], which contains it
 }
var link\u regex=/

这看起来是这样的:


  • 文本
    )。在属性值中有一个
    >`是完全有效的,因此该假设无效。

    如果您在浏览器中,您确实应该使用本机DOM

    如果不是,假设href不包含像
    这样的奇怪字符,则可以使用以下正则表达式:

    var matches = link.match(/^<a\s+[^>]*href="([^"]+)"[^>]*>([^<]*)<\/a>$/);
    matches[1] == "someplace/topics/us/john.htm";
    matches[2] == "John Dow";
    
    var matches=link.match(/^

  • 要获得完整的解决方案,请使用HTML解析器。

    为什么要使用正则表达式?为什么不使用DOM?您是否在浏览器之外执行此操作?非常感谢您的帮助!我让正则表达式正常工作。我希望通过ajax返回链接,否则我肯定会使用querySelectorAll解决方案。此外,我的链接将与特定的sourc相关e、 这是一种可预测的格式,所以我不希望在其中包含特殊字符。我现在就准备好了!@lw0:很高兴这有帮助!顺便说一句,您仍然不必对通过ajax返回的数据使用正则表达式。我已经添加了几个示例来说明如何执行此操作。非常感谢您的响应。出于某种原因,您使用的表达式不适用于我。我满足于下面的正则表达式,它让我非常接近我需要的:content.match(/
    {
        "htmlList": [
            "blah blah <a href=\"someplace/topics/us/john.htm\" class=\"r_lapi\">John Dow</a> blah blah",
            "<a href=\"foo\">Don't pick me</a>",
            "Two in this one <a href=\"blahblahblah\" class=\"r_lapi\">Jane Bloggs</a> and <a href=\"blahblahblah\" class=\"r_lapi\">Trevor Bloggs</a>"
        ]
    }
    
     var link_regex = /<a(?:>|\s[^>]*>)(.*?)<\/a>/i;
     var match = content.match(link_regex);
     if (match) {
         // Use match[1], which contains it
     }
    
    var matches = link.match(/^<a\s+[^>]*href="([^"]+)"[^>]*>([^<]*)<\/a>$/);
    matches[1] == "someplace/topics/us/john.htm";
    matches[2] == "John Dow";