-1

在这样的网页上

 <div>text text</div> |text text 55.555555 |44.444444 | <div>text <b>name</b></div>

我需要得到这样的数组

{ [55.555555 , 44.444444, "name"] , [ ... , ... , ... ], ... } 

我想用正则表达式来实现 - 查找坐标部分,但我不知道如何写这部分:

return all text parts which match this expression

你能帮我一些想法/功能吗?

更新

我在这里找到了 nativeTreeWalker 函数获取所有文本节点/ SO ,我更改了此函数以查找 2 个数字和一个文本。这非常有效,但我仍然有一个错误,它返回偶数,如 1234 .. 没有小数。

function nativeTreeWalker() {
    var walker = document.createTreeWalker(
        document.body, 
        NodeFilter.SHOW_TEXT, 
        null, 
        false
    );

    var node;
    var textNodes = [];
    var name = false;
    var elem = null;

    while(node = walker.nextNode()) {

        if (name){ elem.push(node.nodeValue); textNodes.push(elem); console.log(elem); name = false; }
        else { elem = null; }

        elem = node.nodeValue.match(/\d{2}.\d+/g);
        if (elem!=null){ name=true; } 

    }
}

nativeTreeWalker()
4

3 回答 3

1

好的,所以这是我的解决方案..

function nativeTreeWalker() {
    var walker = document.createTreeWalker(
        document.body, 
        NodeFilter.SHOW_TEXT, 
        null, 
        false
    );

    var node;
    var textNodes = [];
    var name = false;
    var elem = null;

    while(node = walker.nextNode()) {

        if (name){ elem.push(node.nodeValue); textNodes.push(elem); console.log(elem); name = false; }
        else { elem = null; }

        elem = node.nodeValue.match(/\d{2}.\d+/g);
        if (elem!=null){ name=true; } 

    }
}

nativeTreeWalker()
于 2013-03-11T09:41:02.430 回答
0

如果您确定数据的输入格式不能更改,则此正则表达式应满足您的需求:

[|].*?([+-]?\d+[.]\d+).*?[|].*?([+-]?\d+[.]\d+).*?[|].*?<b>(.*?)</b>

第一组 ( $1) 包含第一个坐标,第二组 ( ) 包含第二$2个坐标,第三组 ( ) 包含$3名称。

这是一个演示,向您展示如何将它与 JavaScript 一起使用。

于 2013-02-25T11:03:57.093 回答
0

在您的更新中,您的函数返回非十进制数字的原因是您没有转义.,因此它被解释为匹配除换行符之外的任何字符的通配符元字符。为了只匹配小数,正则表达式

elem = node.nodeValue.match(/\d{2}.\d+/g);

应该是/\d{2}\.\d+/g

使用 aTreeWalker似乎是个好主意,所以当您设法使用它以您在问题中请求的形式创建一个数组时,请发布您的最终代码作为答案,即使用单独的坐标数组及其关联名称。

于 2013-02-25T11:24:58.947 回答