获取数组从包含字符串的第一个元素到包含字符串的最后一个元素的切片
obtain slice of array from first element containing string to last element containing another
我试图从包含这些字母的第一个元素(在这种情况下)到包含这些字母的最后一个元素(在这种情况下)获取字符串数组的切片。
首先输入是一个句子,所以我用空格分隔它。然后我试图从indexOf('IN')获得切片,直到lastIndexOf('NN'),但我得到一个空数组。
这是我尝试的:
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)"]
?
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);
演示:http://jsfiddle.net/8WS3g/
注意:Array.reduce
和Array.reduceRight
方法仅在IE9及以后版本中支持。(问题中使用的Array.index
和Array.indexOf
方法也是如此,因此它不会改变需求。)
找到符合条件的子字符串,然后拆分它。第一部分使用正则表达式搜索以(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)"]
相关文章:
- 对id以某个字符串开头的元素进行计数
- 如何使用jQuery each分离字符串中的元素
- 如何使用JQuery在Javascript中转换字符串中的HTML元素
- 数组中元素(字符串)的总和
- JavaScript forEach.迄今为止的字符串元素
- 试图从数组中只移除字符串元素,但无法向右循环
- 如何将主干序列化形式的所有字符串元素大写
- 如何在 JS 中将字符串元素解析为对象
- 将 JSON 数组中的字符串元素解析为整数
- 使用字符串元素列表作为 Select2 组件的源
- 从 JavaScript 数组中删除字符串元素
- 将字符串元素传递给数据键
- 使用JavaScript将每个数组字符串(元素)的某些部分加粗
- 检查javascript数组中的字符串元素
- 将数组的字符串元素与另一个数组的对象元素属性进行比较
- 如何拆分字符串数组中的每个字符串元素
- 试图使用映射将字符串元素添加到数组
- 在javascript的for循环中设置数组's字符串元素的长度为一个变量
- 在javascript中查找数组中字符串元素的最大出现次数
- 在Django中发送一个字符串元素列表