2

我有这部分代码

<a href='project.php?id=5'>test</a> 

其中id数字可以有不同的长度,我只需要提取这个数字。是否可以通过正则表达式或更好的方法?

编辑

我可能有解决方案,适合我的问题,你的想法:

string.split('=')[2].split('\'')[0]

当字符串包含文本时。我敢肯定,该文本将始终具有相同的模式

4

2 回答 2

3

假设你有你的字符串"<a href='project.php?id=5'>test</a>"

使用正则表达式解析 HTML 会变得非常难看(如果a有更多属性怎么办?如果那里有多个标签怎么办?)

最干净的方法是将其转储到一个新的 HTML 元素中,并使用强大的原生内置 DOM API 将其作为 HTML 处理,而不是作为字符串处理。

var temp = document.createElement("div");
temp.innerHTML = "<a href='project.php?id=5'>test</a>";
var url = temp.firstChild.href; // now contains project.php?id=5

现在我们可以使用更传统的工具来提取id

var id = url.split("=")[1]; // the first thing after =.

更普遍的策略是:

  • 创建一个空元素片段并将我们的 HTML 放在那里
  • 使用 DOM 查询方法来查找我们的元素,在这种情况下.firstChild就足够了,但getElementsByTagName甚至querySelector可能有用。
  • 一旦我们得到属性,它只是一个简单的字符串,我们可以安全地使用正则表达式,或者我们选择的任何其他字符串处理方法。

如果您不熟悉 DOM API,那么本教程是一个不错的起点。这就是我们使用 JavaScript 处理文档的方式,并且知道这对您作为前端 JavaScript 开发人员的成功很重要。

小提琴

于 2013-08-26T06:35:22.860 回答
0
function parse(url){
    var result = { pathname: null, search: {} };
    var parts = url.split('?');
    result.pathname = parts[0];
    var search = parts[1];
    if(search){
        var ps = search.split('&');
        for(var i = 0; i < ps.length; i++){
            var p = ps[i].split('=');
            result.search[p[0]] = p[1];
        }
    }
    return result;
}

parse('project.php?id=5');

编辑:要获得锚元素:

 var anchors = document.getElementsByTagName('a');
 for(var i = 0; i < anchors.length; i++){
     var a = anchors[i];
     if(a.innerHTML === 'test')
         console.log(parse(a.href));
 }
于 2013-08-26T06:39:15.523 回答