检查字符串包含javascript中的子字符串

时间:2015-07-26 15:37:32

标签: javascript

我正在构建一个节点应用程序,该应用程序的一个模块会检查给定域名的名称服务器是否指向AWS。

使用dns模块,我有以下代码:

dns.resolveNs(domain, function (err, hostnames) {
    console.log(hostnames);
    console.log(hostnames.indexOf('awsdns') > -1);
});

hostnames输出一个主机名数组,我使用的特定域具有以下主机名结构(x4):

ns-xx.awsdns-xx.xxx

console.log(hostnames.indexOf('awsdns') > -1);会返回false

2 个答案:

答案 0 :(得分:3)

如果hostnames是一个数组,那么hostnames.indexOf('awsdns')正在寻找完全匹配(整个字符串)'awsdns'的条目。

要查找数组中的子字符串,请使用some

console.log(hostnames.some(function(name) {
    return name.indexOf('awsdns') > -1;
});

或者使用ES6语法:

console.log(hostnames.some((name) => name.indexOf('awsdns') > -1));

直播示例:

var a = ['12.foo.12', '21.bar.21', '42.foo.42'];

// Fails there's no string that entirely matches 'bar':
snippet.log(a.indexOf('bar') > -1);

// Works, looks for substrings:
snippet.log(a.some(function(name) {
  return name.indexOf('bar') > -1;
}));
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

答案 1 :(得分:1)

hostnames[0].indexOf('awsdns') > -1;

由于主机名是一个数组,因此您需要检查实际主机名的索引,而不是数组。

请注意,这只有效,因为您已经说过如果任何条目都有子字符串,那么它们都会。 (这是非常不寻常的。)否则,如果第一个条目没有,但后续条目没有,则会失败。