Javascript 获取从包含字符串的第一个元素到包含另一个字符串的最后一个元素的数组切片
我试图从本例中包含这些字母的第一个元素到本例中包含这些字母的最后一个元素,获取字符串数组的一个片段 首先,输入是一个句子,所以我用空格将其拆分。然后我尝试从indexOf('IN')到lastIndexOf('NN')获取一个切片,但得到的是一个空数组 以下是我尝试过的:Javascript 获取从包含字符串的第一个元素到包含另一个字符串的最后一个元素的数组切片,javascript,arrays,Javascript,Arrays,我试图从本例中包含这些字母的第一个元素到本例中包含这些字母的最后一个元素,获取字符串数组的一个片段 首先,输入是一个句子,所以我用空格将其拆分。然后我尝试从indexOf('IN')到lastIndexOf('NN')获取一个切片,但得到的是一个空数组 以下是我尝试过的: var str = "weather(NN) in(IN) boston(NN)" str.split(' ').slice(str.split(' ').indexOf('IN'), str.split(' ').lastI
var str = "weather(NN) in(IN) boston(NN)"
str.split(' ').slice(str.split(' ').indexOf('IN'), str.split(' ').lastIndexOf('NN')+1);
如何获取它,以便获取
[“in(in)”,“boston(NN)”]
或者如果字符串是“weather(NN)in(in)boston(NN)massachusetts(NN)”,则获取[“in(in)”,“boston(NN)”,“massachusetts(NN)”。
找到符合条件的子字符串,然后将其拆分。第一部分使用正则表达式搜索以(IN)结尾的字符串。第二部分查找(NN)的最后一个索引,然后添加4以说明(NN)中的4个字符
像这样:
var str = "weather(NN) in(IN) boston(NN)";
str.substring(str.search(/[^\s]+\(IN\)/), str.lastIndexOf('(NN)') + 4).split(' ')
//["in(IN)", "boston(NN)"]
它还致力于:
var str = "weather(NN) in(IN) boston(NN) is(VBZ)";
//["in(IN)", "boston(NN)"]
var str = "bad(JJ) weather(NN) in(IN) boston(NN) is(VBZ)";
//["in(IN)", "boston(NN)"]
indexOf
和lastIndexOf
方法不在数组项中查找子字符串,它们只查找完整项的匹配项
您可以使用reduce
和reduceRight
方法查找数组:
var str = "weather(NN) in(IN) boston(NN)";
var arr = str.split(' ');
var first = arr.reduce(function(p, c, i){
return p != -1 ? p : c.indexOf('IN') != -1 ? i : -1;
}, -1);
var last = arr.reduceRight(function(p, c, i, a){
return p != -1 ? p : c.indexOf('NN') != -1 ? i : -1;
}, -1);
arr = arr.slice(first, last + 1);
演示:
注意:
Array.reduce
和Array.reduceRight
方法仅在IE9和更高版本中受支持。(这同样适用于问题中使用的Array.index
和Array.indexOf
方法,因此它不会改变要求。)这不会在“中查找包含”的项,它总是从第二项中获取。例如,如果字符串是“boston(in)boston(NN)的恶劣(XX)天气(NN)”
它将返回[“weather(NN)”,“in(in)”,“boston(NN)”]
。wait@Guffa是正确的。在
中的之后,如何让它工作,而不仅仅是第二个元素。我的错误,我误解了这个问题。我更新了我的回复。最后一件事。如何获取仅包含(NN)的所有元素?@user3743069:您可以使用过滤器方法:var NN=arr.filter(函数(v){return v.indexOf('(NN)!=-1;})代码>。