Javascript JS。如何通过连接变量来创建正则表达式模式
我无法修复以下问题:Javascript JS。如何通过连接变量来创建正则表达式模式,javascript,regex,Javascript,Regex,我无法修复以下问题: <html> <head> <title>Test</title> <script> function myFunction(arr) { var N = [0,1,2,3,4,5,6,7,8,9]; for (var s in N) { var pattern = new RegExp('/^[A-z]et_[' + s + ']_\\d/'); // N
<html>
<head>
<title>Test</title>
<script>
function myFunction(arr) {
var N = [0,1,2,3,4,5,6,7,8,9];
for (var s in N) {
var pattern = new RegExp('/^[A-z]et_[' + s + ']_\\d/');
// NOTE I get the following, is that how it should be?
// window.alert(pattern); => /\/^[A-z]et_[0]_\d\//
// NOTE: I checked that it works fine for a single digit case, say:
// var pattern = new RegExp(/^[A-z]et_[3]_\d/);
var newarr = arr.filter(elt => pattern.test(elt));
document.getElementById("demo").innerHTML = newarr;
}}
</script>
</head>
<body>
<div id="demo" onclick="myFunction(['aaaLet_0_0', 'Let_1_99', 'Let_2_', 'Let_3_99', 'Pet_2_', 'Pet_3_99', '_9_33']);">click here</div>
<hr>
<p>expected output: Let_1_99, Let_3_99, Pet_3_99</p>
</body>
</html>
试验
函数myFunction(arr){
var N=[0,1,2,3,4,5,6,7,8,9];
for(N中的变量s){
var pattern=newregexp('/^[A-z]et.['+s+'].\\d/');
//注意,我得到以下信息,这是应该的吗?
//window.alert(模式);=>/\/^[A-z]et\[0]\ud\//
//注意:我检查过它是否适用于一位数的情况,例如:
//var模式=新的RegExp(/^[A-z]et_3]\ud/);
var newarr=arr.filter(elt=>pattern.test(elt));
document.getElementById(“demo”).innerHTML=newarr;
}}
点击这里
预期输出:Let_1_99,Let_3_99,Pet_3_99
我看到了许多类似的问题,但我一直无法找到如何修复我的代码。这应该是可能的,不是吗
编辑
以下是我需要的:
<html>
<head>
<title>Test</title>
<script>
var newarr = [];
function myFunction(arr) {
var N = [0,1,2,3,4,5,6,7,8,9];
for (var s in N) {
var pattern = new RegExp('^[A-z]et_' + s + '_\\d'); // NOTE: not /
var lnewarr = arr.filter(elt => pattern.test(elt));
if(typeof lnewarr !== 'undefined' && lnewarr.length > 0){newarr.push(lnewarr)};
}
document.getElementById("demo").innerHTML = newarr;
}
</script>
</head>
<body>
<div id="demo" onclick="myFunction(['aaaLet_0_0', 'Let_1_99', 'Let_2_', 'Let_3_99', 'Pet_2_', 'Pet_3_99', '_9_33']);">click here</div>
<hr>
<p>expected output: Let_1_99, Let_3_99, Pet_3_99</p>
</body>
</html>
试验
var newarr=[];
函数myFunction(arr){
var N=[0,1,2,3,4,5,6,7,8,9];
for(N中的变量s){
var pattern=new RegExp('^[A-z]et_'+s+'\\\d');//注意:不是/
var lnewarr=arr.filter(elt=>pattern.test(elt));
if(typeof lnewarr!='undefined'&&lnewarr.length>0){newarr.push(lnewarr)};
}
document.getElementById(“demo”).innerHTML=newarr;
}
点击这里
预期输出:Let_1_99,Let_3_99,Pet_3_99
(很抱歉,如果我的文章大部分是代码。希望它能帮助其他人。)你可以使用
来代替循环。像这样加入:
var pattern = new RegExp('^[A-Za-z]et_[' + N.join('') + ']_\\d');
//=> /^[A-Za-z]et_[0123456789]_\d/
这适用于数组中有单个字符值的情况N
对于一般用途,可以使用以下表达式:
var pattern = new RegExp('^[A-Za-z]et_(?:' + N.join('|') + ')_\\d');
//=> /^[A-Za-z]et_(?:0|1|2|3|4|5|6|7|8|9)_\d/
使用for循环可以执行以下操作:
var N = [0,1,2,3,4,5,6,7,8,9];
var str='(?:';
for (var s in N)
str += s + '|';
str = str.replace(/\|$/, ')');
var pattern = new RegExp('^[A-Za-z]et_' + str + '_\\d');
//=> /^[A-Za-z]et_(?:0|1|2|3|4|5|6|7|8|9)_\d/
是的,很有效,谢谢。让我问一下,for循环有什么问题?有办法保存它吗?(我问题中的例子来自一段较大的代码,其中我需要一个for循环)。@anubhave,我困惑的是我们如何在regexp()中编写regexp。看来我应该避免使用“/”。谢谢你的帮助。我想我不明白为什么正则表达式不仅仅是/^[A-z]et\ud\ud/
。。。这个<代码>变量模式=/^[A-z]et\ud\ud/代码>/var arr=['aaaLet_0_0'、'Let_1_99'、'Let_2_99'、'Let_3_99'、'Pet_2_99'、'Pet_3_99'、'u 9_33'代码>/var lnewarr=arr.filter(elt=>pattern.test(elt))代码>/产生:[“Let_1_99”、“Let_3_99”、“Pet_3_99”]