0

嗨,我在选择不在单/双 qoutes 中的数字时遇到问题。假设我们在下面有这段文字。

    <style color='#424242'></style>

123

    /* you can count this 5454 */

    <style color="#767676"></style>

8787

我只想选择 123 和 8787 ,我应该如何使用 javascript 中的正则表达式来做到这一点

如果我在 RegExp 中使用 \d,它将选择所有数字,我知道。但我想告诉它,只选择那些没有被 double/single/star 包围的数字。

4

2 回答 2

2

我会这样做:

var numbers = str.split('"').filter(function(_,i){ return !(i%2) }).join('')
                 .split("'").filter(function(_,i){ return !(i%2) }).join('')
                 .match(/\d+/g);

这个想法是首先删除引号之间的内容,然后应用正则表达式。

演示(打开控制台)

但是,就像任何时候混合 HTML 和正则表达式一样,您会发现它不起作用的情况。因此,如果您的用例没有受到严格控制,您最好进行解析,例如通过将正则表达式应用于element.texContent||element.innerText.

于 2013-07-30T14:49:03.110 回答
0

这可能不是非常跨浏览器的解决方案:

var iterator = document.evaluate(
    "descendant::text()",
    document.body, null,
    XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null),
node;
while (node = iterator.iterateNext()) {
    (node.nodeValue.match(/\d+/) || []).forEach(console.log);
}

仅在 Firefox 中测试,但 AFAIK,大多数浏览器都提供了一些 XPath API,只需查看相关文档即可。

于 2013-07-30T15:33:55.593 回答