javascript解析字符串之间的字符串

标签 javascript

我想根据开始和结束字符串模式从另一个字符串中解析一个字符串。

该示例正在解析 IP 地址,但这可以是任何字符串,不一定是 IP。

有没有更好/更有效的方法来做到这一点:

function parse(str,start,end){
    var ls = str.indexOf(start);
    if(str && ls !== -1) return str.substring(ls+start.length,str.indexOf(end,ls));
    return false;
}

var res = "wlan0: adding default route via 192.168.0.1";
console.log(parse(res,"route via ","\n"));

192.168.0.1

最佳答案

你可以稍微清理一下:

function parseSubstring(str, after, until) {
    var pos0 = after ? str.indexOf(after) : 0,
        posS = pos0 > -1 ? pos0 + after.length : str.length,
        posE = until ? str.indexOf(until, posS) : str.length;

    if (posE >= posS) {
        return str.substring(posS, posE);
    }
}

var input = "wlan0: adding default route via 192.168.0.1",
    part = parseSubstring(input, "route via ");
    // -> "192.168.0.1"

一般而言,如果您实际上不想返回 bool 值,则不要返回 false。这不是 PHP,返回 false 表示错误是错误的。如果函数没有定义结果,则根本不返回结果。

<小时/>

您还可以扩充 String 原型(prototype)。

String.prototype.snip = function(after, until) {
    var pos0 = after ? str.indexOf(after) : 0,
        posS = pos0 > -1 ? pos0 + after.length : this.length,
        posE = until ? this.indexOf(until, posS) : this.length;

    if (posE >= posS) {
        return this.substring(posS, posE);
    }
}

var input = "wlan0: adding default route via 192.168.0.1",
    part = input.snip("route via ");
    // -> "192.168.0.1"

请注意,不传入 until 参数如何转换为“直到字符串末尾”。在 after 参数中传递空字符串将转换为“从头开始”

关于javascript解析字符串之间的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20031120/

相关文章:

javascript - 在 AngularJS 中动态使用 orderBy 过滤器

javascript - jquery - ie - Ajax 请求适用于所有浏览器,但 ie - 内容类型已更改

javascript - 在定时器中调用 lap 函数

javascript - tinyMCE 删除问题

javascript - free-jqGrid(4.15.4),服务器过滤器,客户端排序和分页?

javascript - NodeJS 设置通配符路由或 url 重写

javascript - 元素当前不可见,因此单击按钮时可能无法与之交互

javascript - 当用户在 laravel 5 中关闭浏览器时如何在 Controller 中运行方法

javascript - 为什么这个 Webgl 示例中的光在移动

JavaScript:如何从数组中删除特定元素