我想根据开始和结束字符串模式从另一个字符串中解析一个字符串。
该示例正在解析 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/