Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
包含子RegExp的Javascript复合RegExp_Javascript_Regex_Parsing - Fatal编程技术网

包含子RegExp的Javascript复合RegExp

包含子RegExp的Javascript复合RegExp,javascript,regex,parsing,Javascript,Regex,Parsing,我已经编写了一个RegExp,可以正确验证单一货币,例如欧元或美元: 这就产生了欧元|美元|日元|英镑。。。给定货币=[欧元、美元、日元、英镑……] 我如何使用这个RegExp和货币数组作为输入来构造一个新的RegExp来验证货币对,例如欧元兑美元、美元兑日元 货币数组很大,可能会发生变化,所以我想动态创建这个正则表达式,而不是硬编码所有可能的货币对排列 相同的货币对,例如欧元和美元无效。 不同顺序的货币对是有效的,例如欧元兑美元和美元兑欧元。我想说的是保持简单,并构建一个包含所有可能性的中间数

我已经编写了一个RegExp,可以正确验证单一货币,例如欧元或美元:

这就产生了欧元|美元|日元|英镑。。。给定货币=[欧元、美元、日元、英镑……]

我如何使用这个RegExp和货币数组作为输入来构造一个新的RegExp来验证货币对,例如欧元兑美元、美元兑日元

货币数组很大,可能会发生变化,所以我想动态创建这个正则表达式,而不是硬编码所有可能的货币对排列

相同的货币对,例如欧元和美元无效。
不同顺序的货币对是有效的,例如欧元兑美元和美元兑欧元。

我想说的是保持简单,并构建一个包含所有可能性的中间数组,例如:

const currenciesPair = [];
const currenciesLength = currencies.length

for (let i = 0; i < currenciesLength ; i++) {

    for (let j = 0; j < currenciesLength ; j++) {
        // avoiding pair such as EUREUR, USDUSD, etc...
        if (i !== j) {
            currenciesPair.push(currencies[i] + currencies[j]);
        }
    }
}

使用此数组保留正则表达式您还可以混合使用currencespair和currencespair以获得完全的可能性:

我想说的是保持简单愚蠢,并使用所有可能性构建一个中间数组,例如:

const currenciesPair = [];
const currenciesLength = currencies.length

for (let i = 0; i < currenciesLength ; i++) {

    for (let j = 0; j < currenciesLength ; j++) {
        // avoiding pair such as EUREUR, USDUSD, etc...
        if (i !== j) {
            currenciesPair.push(currencies[i] + currencies[j]);
        }
    }
}
使用这个数组保留正则表达式,您还可以混合使用currencespair和currencespair,以获得完全的可能性:

您只需添加{2}即可精确匹配集合中的两项

例如,/a | b | c{2}/将匹配ab、ca而不是ad

可以按如下方式更改动态正则表达式:

常量货币=[欧元、美元、日元、英镑]; const singleMatch=new regexpcurrences.join'|'; console.log'singleMatch-EUR:',singleMatch.test'EUR'; const doubleMatch=new RegExp+currencies.join'|'+'{2}'; console.log'doubleMatch-EUR:',doubleMatch.test'EUR'; console.log'double match-USDEUR:',doubleMatch.test'USDEUR'; console.log'double-match-GBPEUR:',doubleMatch.test'GBPEUR'; log'double match-GBPGDD:',doubleMatch.test'GBPGDD' 您只需添加{2}即可精确匹配集合中的两项

例如,/a | b | c{2}/将匹配ab、ca而不是ad

可以按如下方式更改动态正则表达式:

常量货币=[欧元、美元、日元、英镑]; const singleMatch=new regexpcurrences.join'|'; console.log'singleMatch-EUR:',singleMatch.test'EUR'; const doubleMatch=new RegExp+currencies.join'|'+'{2}'; console.log'doubleMatch-EUR:',doubleMatch.test'EUR'; console.log'double match-USDEUR:',doubleMatch.test'USDEUR'; console.log'double-match-GBPEUR:',doubleMatch.test'GBPEUR';
log'double match-GBPGDD:',doubleMatch.test'GBPGDD' 不过,这是一个相当低效的算法,因此根据货币数量,其他选项会更好

如果数据集可行,我更喜欢克里斯蒂安·特拉娜的解决方案

常量货币=[欧元、美元、日元、英镑]; const product_matrix=货币//循环所有货币 .map currency=>currences//我们希望将该货币与所有其他货币合并 .map对=>货币!==pair//仅当货币及其对不相同时才执行联接 ? `${货币}${pair}` :null .filter Boolean//删除所有空值。您可以使用reduce而不是map来跳过此步骤。 .平坦;//将二维数组展平为一维数组。
console.log产品_矩阵 不过,这是一个相当低效的算法,因此根据货币数量,其他选项会更好

如果数据集可行,我更喜欢克里斯蒂安·特拉娜的解决方案

常量货币=[欧元、美元、日元、英镑]; const product_matrix=货币//循环所有货币 .map currency=>currences//我们希望将该货币与所有其他货币合并 .map对=>货币!==pair//仅当货币及其对不相同时才执行联接 ? `${货币}${pair}` :null .filter Boolean//删除所有空值。您可以使用reduce而不是map来跳过此步骤。 .平坦;//将二维数组展平为一维数组。
console.log产品_矩阵;同样的方式?curencies=[欧元兑美元,美元兑日元]?或者问题是你如何用[EUR,USD,JPY]作为输入来构造数组[EURUUSD,EURJPY,USDEUR,JPYEUR,USDJPY,JPYUSD]。@如果不清楚,很抱歉,货币数组很大,可能会发生变化,所以我想动态创建这个正则表达式,没有硬编码所有可能的货币对排列,因此我问您是否要创建“[EUR USD,EURJPY,USDEUR,JPYEUR,USDJPY,JPYUSD],并将[EUR,USD,JPYUSD]作为输入。我想是的?@Shilly啊是的,有了货币数组作为输入,我没有货币对数组不幸的是,你从哪里得到货币数组?同样的方法?curencies=[欧元兑美元,美元兑日元]?或者问题是你如何用[EUR,USD,JPY]作为输入来构造数组[EURUUSD,EURJPY,USDEUR,JPYEUR,USDJPY,JPYUSD]。@如果不清楚,很抱歉,货币数组很大,可能会发生变化,所以我想动态创建这个正则表达式,而不是硬编码所有可能的p
货币对的变体因此,我问您是否要创建“[EUR USD,EURJPY,USDEUR,JPYEUR,USDJPY,JPYUSD],并将[EUR,USD,JPYUSD]作为输入。我想是的?@Shilly啊是的,以货币数组作为输入,我没有货币对数组不幸的是,你从哪里得到货币数组?啊当然,啊是的,我应该提到相同的货币对无效,但无论如何,谢谢!不确定什么是负面展望,您是否能够编辑您的解决方案以包含它?或者负面展望:如:a | b | c\1{2}.谢谢@PJProudhon,我把你的提示整合到了答案中。当然,啊,是的,我应该提到相同的货币对是无效的,但无论如何,谢谢!不确定什么是负面展望,您是否能够编辑您的解决方案以包含它?或者负面展望:如:a | b | c\1{2}.谢谢@PJProudhon,我将你的提示整合到回答中我认为这是完全有效的最佳解决方案,谢谢:至少在变量中缓存currences.length如果你这样做,否则它将是最慢的解决方案。const currency_count=currencies.length;对于我来说,