使用lodash从数组中获取与正则表达式匹配的值

时间:2016-02-19 04:56:41

标签: javascript json regex lodash

我的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的严格匹配。

请帮我修改上面的内容,以便结果是所描述的新数组。

预期输出

当usertype字母h仅显示行

{"id":"7","name":"hello"}

2 个答案:

答案 0 :(得分:10)

要检查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>';

<强>更新

  

当一个usertype字母h它只显示行

您可以使用

_.filter(result, obj => /^h/.test(obj.name));

使用i - 不区分大小写的标记来匹配字母表,无论大小写如何。这将匹配hH

答案 1 :(得分:0)

正则表达式(&#39; ^ h。&#39;)应该对此有所帮助。获取名称为h的行。