使用正则表达式在<p>标记内找到除锚标记之外的所有内容

Cor*_*rey 1 javascript regex

我在页面上设置了几个HTML块,如:

<p class="something">
    <a href="http://example.com/9999">text 1 2 3</a>
    <a href="http://example.com/2346saasdf">text 3 4 5</a>
    (9999)
    <a href="http://example.com/sad3ws">text 5 6 7random</a>
</p>
Run Code Online (Sandbox Code Playgroud)

我想用它们得到括号中的数字.我不得不承认我以前从未真正使用过正则表达式 - 阅读它,看过它的例子但是我自己没有使用它.无论如何,我创造了这个有点环顾四周:

<p class="something">(.*?)</p>

这正确地得到整个<p>块,但是,我只想要(9999)(括号完整).我真的不确定如何得到它.

假设页面上的其他元素也可能在括号中有数字(但它们不会包含在这种格式中),并且HTML将保持有效且一致,我该如何获取它?

我知道这对于之前使用过正则表达式的人来说可能很容易,但对于解决方案,我会欣赏每个角色捕获的细节,以便我可以从中学习.

Mar*_*iot 6

不要使用正则表达式来解析HTML.

相反,使用HTML解析器,然后只需读取所需<p>块中的文本(非标记)内容.

jQuery是一个相当不错的HTML解析器,因此您可以使用以下命令获取存储在变量中的所需文本x:

var x = $('p').clone().find('a').remove().end().text();
Run Code Online (Sandbox Code Playgroud)

工作实例

如果由于某种原因你不能使用jQuery让你的生活轻松,你可以在DOM使用原始JavaScript:

var y = document.getElementsByTagName("p")[0].cloneNode(true);
var x = "";
for(var k in y.childNodes){ 
    if(y.childNodes[k].nodeType == 3){ 
        x += y.childNodes[k].textContent; 
    }
}
x = x.trim();
Run Code Online (Sandbox Code Playgroud)

工作实例