在数组中查找与给定正则表达式匹配的元素
Find an element in an array that matches the regex given
我有一个字符串格式的不同元素数组,我想检查数组中是否包含日期字段。目前我正在考虑使用日期正则表达式,然后将其与数组中的所有元素进行匹配,但我不确定如何使用它。
let arr = ['SUPERMARKET', '465', 'S', 'Arroyo', 'Pkwy', 'Pasadena,', 'CA', '91105', '1', '1', '1', 'DOZ', 'FREE', 'RANGE', 'EGG', '.89', 'GV', 'ORGANIC', 'MILK', '2%', '.19', 'SBUX', 'FRENCH', 'ROAST', 'WL', '.99', 'SUBTOTAL', '.07', 'TOTAL', '.07', '.07', 'PURCHASE', '.07', 'VISA', 'DEBIT', '3991', 'Auth', '#140987', 'Exp', 'Date', '**/**', 'Lane', '#14', 'Cashier', '1409', '11/21/2019', '01:28', 'PMRef/Seq', '#140987', 'MRCH', '204650', 'Term=001', 'IC=CC', 'EPS', 'Sequence', '934518', 'ITEM', '1', 'H,', 'STEPHIE', '11/21/2019', '01:28', 'PM', '4130', '29', '1041', '2675']
let dateRegex = "^([0]?[1-9]|[1|2][0-9]|[3][0|1])[./-]([0]?[1-9]|[1][0-2])[./-]([0-9]{4}|[0-9]{2})$"
你可以试试这个:
let arr = ['SUPERMARKET', '465', 'S', 'Arroyo', 'Pkwy', 'Pasadena,', 'CA', '91105', '1', '1', '1', 'DOZ', 'FREE', 'RANGE', 'EGG', '.89', 'GV', 'ORGANIC', 'MILK', '2%', '.19', 'SBUX', 'FRENCH', 'ROAST', 'WL', '.99', 'SUBTOTAL', '.07', 'TOTAL', '.07', '.07', 'PURCHASE', '.07', 'VISA', 'DEBIT', '3991', 'Auth', '#140987', 'Exp', 'Date', '**/**', 'Lane', '#14', 'Cashier', '1409', '11/08/2019', '01:28', 'PMRef/Seq', '#140987', 'MRCH', '204650', 'Term=001', 'IC=CC', 'EPS', 'Sequence', '934518', 'ITEM', '1', 'H,', 'STEPHIE', '11/12/2019', '01:28', 'PM', '4130', '29', '1041', '2675']
let dateRegex = /^([0]?[1-9]|[1|2][0-9]|[3][0|1])[./-]([0]?[1-9]|[1][0-2])[./-]([0-9]{4}|[0-9]{2})$/
arr.forEach(e => {
if(dateRegex.test(e)) {
console.log(e)
}
})
注:
- 您当前数据中的日期是
mm/dd/yyyy
格式的“11/21/2019”,而您使用的正则表达式是 dd/mm/yyyy
格式,因此 dd
部分你的日期('21')不会匹配正则表达式。我已更改此答案中的日期以匹配正则表达式。
- 或者您可以更改正则表达式以匹配日期 (
mm/dd/yyyy
),方法是:^([0]?[1-9]|[1][0-2])[./-]([0]?[1-9]|[1|2][0-9]|[3][0|1])[./-]([0-9]{4}|[0-9]{2})$
- 如果将它们放在
/
而不是引号 "
之间,则可以按原样使用正则表达式
arr.filter(x=>x.match(whateEverRegex))
这将return每个满足x.match(whateEverRegex)
的元素
我有一个字符串格式的不同元素数组,我想检查数组中是否包含日期字段。目前我正在考虑使用日期正则表达式,然后将其与数组中的所有元素进行匹配,但我不确定如何使用它。
let arr = ['SUPERMARKET', '465', 'S', 'Arroyo', 'Pkwy', 'Pasadena,', 'CA', '91105', '1', '1', '1', 'DOZ', 'FREE', 'RANGE', 'EGG', '.89', 'GV', 'ORGANIC', 'MILK', '2%', '.19', 'SBUX', 'FRENCH', 'ROAST', 'WL', '.99', 'SUBTOTAL', '.07', 'TOTAL', '.07', '.07', 'PURCHASE', '.07', 'VISA', 'DEBIT', '3991', 'Auth', '#140987', 'Exp', 'Date', '**/**', 'Lane', '#14', 'Cashier', '1409', '11/21/2019', '01:28', 'PMRef/Seq', '#140987', 'MRCH', '204650', 'Term=001', 'IC=CC', 'EPS', 'Sequence', '934518', 'ITEM', '1', 'H,', 'STEPHIE', '11/21/2019', '01:28', 'PM', '4130', '29', '1041', '2675']
let dateRegex = "^([0]?[1-9]|[1|2][0-9]|[3][0|1])[./-]([0]?[1-9]|[1][0-2])[./-]([0-9]{4}|[0-9]{2})$"
你可以试试这个:
let arr = ['SUPERMARKET', '465', 'S', 'Arroyo', 'Pkwy', 'Pasadena,', 'CA', '91105', '1', '1', '1', 'DOZ', 'FREE', 'RANGE', 'EGG', '.89', 'GV', 'ORGANIC', 'MILK', '2%', '.19', 'SBUX', 'FRENCH', 'ROAST', 'WL', '.99', 'SUBTOTAL', '.07', 'TOTAL', '.07', '.07', 'PURCHASE', '.07', 'VISA', 'DEBIT', '3991', 'Auth', '#140987', 'Exp', 'Date', '**/**', 'Lane', '#14', 'Cashier', '1409', '11/08/2019', '01:28', 'PMRef/Seq', '#140987', 'MRCH', '204650', 'Term=001', 'IC=CC', 'EPS', 'Sequence', '934518', 'ITEM', '1', 'H,', 'STEPHIE', '11/12/2019', '01:28', 'PM', '4130', '29', '1041', '2675']
let dateRegex = /^([0]?[1-9]|[1|2][0-9]|[3][0|1])[./-]([0]?[1-9]|[1][0-2])[./-]([0-9]{4}|[0-9]{2})$/
arr.forEach(e => {
if(dateRegex.test(e)) {
console.log(e)
}
})
注:
- 您当前数据中的日期是
mm/dd/yyyy
格式的“11/21/2019”,而您使用的正则表达式是dd/mm/yyyy
格式,因此dd
部分你的日期('21')不会匹配正则表达式。我已更改此答案中的日期以匹配正则表达式。 - 或者您可以更改正则表达式以匹配日期 (
mm/dd/yyyy
),方法是:^([0]?[1-9]|[1][0-2])[./-]([0]?[1-9]|[1|2][0-9]|[3][0|1])[./-]([0-9]{4}|[0-9]{2})$
- 如果将它们放在
/
而不是引号"
之间,则可以按原样使用正则表达式
arr.filter(x=>x.match(whateEverRegex))
这将return每个满足x.match(whateEverRegex)