使用 lodash 从与正则表达式匹配的数组中获取值
Posted
技术标签:
【中文标题】使用 lodash 从与正则表达式匹配的数组中获取值【英文标题】:Getting values from array that matches a regular expression using lodash 【发布时间】:2016-05-31 13:42:38 【问题描述】:我的 json 数组:
["id":"7","name":"hello","id":"7","name":"shan","id":"7","name":"john"
"id":"7","name":"hello"]
我想获得一个与name
上以字母开头的正则表达式匹配的新数组。
我正在使用regexp,但我不知道如何实现它。
这是我的代码:
var newitem=_.filter(result,item=>item.name='hello');
console.log(newitem);
但它只返回 name
的严格匹配。
请帮我修改上面的,以便结果是一个新的数组。
预期输出
当用户输入字母 h
时,它只显示行
"id":"7","name":"hello"
【问题讨论】:
过滤name
以任意字母开头的元素?
请注意,item.name='hello'
将分配字符串值。您需要使用==
或===
。
不应期望输出包含两个对象,因为有两个对象的name
以h
开头。
【参考方案1】:
要检查name
是否以字符串开头,您可以将RegExp#test
与正则表达式一起使用。
var newItem = _.filter(result, obj => /^[a-zA-Z]/.test(obj.name));
正则表达式^[a-zA-Z]
将检查名称是否以字母开头。
var arr = [
"id": "7",
"name": "hello"
,
"id": "7",
"name": "shan"
,
"id": "7",
"name": "jhon"
,
"id": "7",
"name": "hello"
,
id: 10,
name: '$haun'
];
var newItem = _.filter(arr, obj => /^[a-zA-Z]/.test(obj.name));
console.log(newItem);
<script src="https://cdnjs.com/libraries/lodash.js/"></script>
可以使用Array#filter
编写相同的代码。
arr.filter(obj => /^[a-zA-Z]/.test(obj.name));
var arr = [
"id": "7",
"name": "hello"
,
"id": "7",
"name": "*shan"
,
"id": "7",
"name": "jhon"
,
"id": "7",
"name": "hello"
,
id: 10,
name: '$haun'
];
var newItem = arr.filter(obj => /^[a-zA-Z]/.test(obj.name));
console.log(newItem);
document.body.innerhtml = '<pre>' + JSON.stringify(newItem, 0, 4) + '</pre>';
更新:
当用户输入字母 h 时,它只显示行
你可以使用
_.filter(result, obj => /^h/.test(obj.name));
使用i
-case insensitive 标志来匹配字母表而不考虑大小写。这将匹配h
和H
。
【讨论】:
但它会返回所有行 @BlessanKurien 你说我想得到一个新数组,它匹配以字母开头的名称的正则表达式。 对。预期输出是什么? @BlessanKurien 是否要过滤名称以h
开头的对象,则只需使用/^h/
正则表达式。使用i
标志不区分大小写,即h
和H
。
用预期的输出更新了我的问题
我在 lodash 库中询问正则表达式 lodash.com/docs#isRegExp【参考方案2】:
regex ('^h.') 应该可以解决这个问题。获取名称为 h 的行。
【讨论】:
以上是关于使用 lodash 从与正则表达式匹配的数组中获取值的主要内容,如果未能解决你的问题,请参考以下文章