Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.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
如何在jQuery/Javascript中的每个正则表达式匹配项周围添加括号?_Javascript_Jquery_Regex - Fatal编程技术网

如何在jQuery/Javascript中的每个正则表达式匹配项周围添加括号?

如何在jQuery/Javascript中的每个正则表达式匹配项周围添加括号?,javascript,jquery,regex,Javascript,Jquery,Regex,我需要在正则表达式中的每个匹配项周围添加括号或“”,我已经准备好了所有正则表达式语句。例如: 输入: int a = 0; 输出: <int><a><=><0> 还有一件事,我正在做的是一个“转换器”,它需要读取C中的算术计数并生成它的令牌流。因此,例如,“=”将,“;”将。 上述句子将写成: 以下是我一直在研究的代码: function translate() { var input = 'int a = 0;' + '\nin

我需要在正则表达式中的每个匹配项周围添加括号或“”,我已经准备好了所有正则表达式语句。例如:

输入:

int a = 0;
输出:

<int><a><=><0>

还有一件事,我正在做的是一个“转换器”,它需要读取C中的算术计数并生成它的令牌流。因此,例如,“=”将
,“;”将
。 上述句子将写成:

以下是我一直在研究的代码:

function translate() {
var input = 'int a = 0;' +
    '\nint b = 5;' +
    '\nint a = b + 5;' +
    '\nint c = a1 / 1;' +
    '\ndouble a = 1;' +
    '\nfloat a = 0;' +
    '\na = 0;' +
    '\nfloat a = b + 1;' +
    '\na = (b - c) * 5;';


var regex3 = new RegExp(/(((int|long int|double|long double|float)+\s*([a-zA-Z_]+\d*)*|([a-zA-Z_]+\d*))\s*=\s*(([a-zA-Z_]*|[a-zA-Z_]+\d*)*|\d*|\d+\.\d+);)|(((int|long int|double|long double|float)+\s*([a-zA-Z_]+\d*)*|([a-zA-Z_]+\d*))\s*=(\s*\(*(([a-zA-Z_]*|[a-zA-Z_]+\d*)*|\d*|\d+\.\d+)\)*\s*[+\-/*%]\s*\(*(([a-zA-Z_]*|[a-zA-Z_]+\d*)*|\d*|\d+\.\d+)\)*)*\s*;)/g);

var text = input.match(regex3);
var varTypes = ['int', 'double', 'float', 'long int', 'long double'];
var output = '';

text.forEach(line => {
    varTypes.forEach(type => {
        if (line.match(type))
            line = line.replace(type, '<' + type + '>');

    });
    if (line.match(/=/g)) {
        line = line.replace(/=/g, '<assign_op>')
    }
    if (line.match(/;/g)) {
        line = line.replace(/;/g, '<end_of_statement>');
    }
    if (line.match(/\(/g)) {
        line = line.replace(/\(/g, '<open_parenthesis>')
    }
    if (line.match(/\)/g)) {
        line = line.replace(/\)/g, '<close_parenthesis>')
    }
    if (line.match(/[+\-*/%]/g)) {
        line = line.replace(/[+\-*/%]/g, '<operator>')
    }
    if (line.match(/\+{2}/g)) {
        line = line.replace(/\+{2}/g, '<operator>')
    }
    output += line + '\n';
});

console.log(output);
函数翻译(){
变量输入='INTA=0;'+
'\nT b=5;'+
'\nT a=b+5;'+
“\nIT c=a1/1;”+
'\n双倍a=1;'+
'\n贷款a=0;'+
'\na=0;'+
'\n贷款a=b+1;'+
“\na=(b-c)*5;”;
新regex3=新regex3=新regex3=新regex3=新regex3=新regex3=新regex3=新regex3=新regex3=新regex3=新regex3=新regex3=新regex3=新regex3=新regex3(/((int)的(int)目前目前,长期内,长期内,长期内,长期内,长期内,长期内,长期内,长期内,长期内,长期内,长期内,长期内,新regex3=3=新regex3=新regex3=新regex3=新regex3=新regex3=新regex3=新regex3=新regex3=(新regex3=新regex3=新regex3=新regEXEX3=((//////////////////((((((((((((((((文)新)新regEX)新regEXz.+\d*))\s*=(\s*.(([a-zA-Z.*.[a-zA-Z.+\d*)*.\d*.\d+\)*\s*[+\-/*%]\s*.(([a-zA-Z]*.[a-zA-Z+\d*)*.\d*.\d*.\d*.\d+)*)*\s*;)/g);
var text=input.match(regex3);
var varTypes=['int',double','float','long int','long double'];
var输出=“”;
text.forEach(行=>{
varTypes.forEach(类型=>{
if(行匹配(类型))
行=行。替换(类型“”);
});
if(行匹配(/=/g)){
行=行。替换(/=/g'')
}
if(行匹配(/;/g)){
行=行。替换(/;/g',);
}
if(行匹配(/\(/g)){
行=行。替换(/\(/g'))
}
if(行匹配(/\)/g)){
行=行。替换(/\)/g“”)
}
if(行匹配(/[+\-*/%]/g)){
行=行。替换(/[+\-*/%]/g')
}
if(line.match(/\+{2}/g)){
line=line.replace(/\+{2}/g',)
}
输出+=行+'\n';
});
控制台日志(输出);
}


哦,如果我有很多英语写作错误,而不是一个英语母语的人,那就很抱歉了:)

我花了很长时间研究你复杂的字符串操作问题

我提出了一个“字典”的想法,使替换管理更容易。我使用空格将字符串元素作为目标,用
进行包装

看看代码中的注释

var输入=
'int a=0;'+
'\nT b=5;'+
'\nT a=b+5;'+
“\nIT c=a1/1;”+
'\n双倍a=1;'+
'\n贷款a=0;'+
'\na=0;'+
'\n贷款a=b+1;'+
“\na=(b-c)*5;”+
'\n长整型=(w-x)*7;'+//添加到测试这两个单词类型
'\n长双精度=(x-w)*7;';//添加到测试这两个单词类型
变量字典=[
{
目标:“长整数”,
替换:“long | int”//|为确保保留该空间,将在稍后恢复
},
{
目标:“长双”,
替换:“长|双”//|以确保保留该空间,稍后将恢复
},
{
目标:/=/g,
替换:“分配任务”
},
{
目标:/;/g,
替换:“声明的结尾”
},
{
目标:/\(/g,
替换:“开括号”
},
{
目标:/\)/g,
替换:“关闭括号”
},
{
目标:/[+\-*/%]/g,
替换:“操作员”
},
{
目标:/\+{2}/g,
替换:“操作员”
}
];
函数转换(输入){
//控制台日志(输入);
//你不变的正则表达式
新regex3=新regex3=新regex3=新regex3=新regex3=新regex3=新regex3=新regex3=新regex3=新regex3=新regex3=新regex3=新regex3=新regex3=新regex3(/((int)的(int)目前目前,长期内,长期内,长期内,长期内,长期内,长期内,长期内,长期内,长期内,长期内,长期内,长期内,新regex3=3=新regex3=新regex3=新regex3=新regex3=新regex3=新regex3=新regex3=新regex3=(新regex3=新regex3=新regex3=新regEXEX3=((//////////////////((((((((((((((((文)新)新regEX)新regEXz.+\d*))\s*=(\s*.(([a-zA-Z.*.[a-zA-Z.+\d*)*.\d*.\d+\)*\s*[+\-/*%]\s*.(([a-zA-Z]*.[a-zA-Z+\d*)*.\d*.\d*.\d*.\d+)*)*\s*;)/g);
//使用正则表达式创建的行数组
var lines_array=input.match(regex3);
//console.log(行数组);
//结果变量
var输出=“”;
//处理每条生产线
lines\u array.forEach(line=>{
//使用字典替换一些特殊情况
//它在替换项周围添加空格,以确保单词分离
dictionary.forEach(翻译=>{
if(line.match(translation.target)){
line=line.replace(translation.target,“+translation.replacement+”);//注意空格
}
});
//删除双空格
line=line.trim().replace(/\s+/g,“”);
//使用空格获取单词数组以添加尖括号
变量字=行。拆分(“”);
words.forEach(word=>{
输出+=“”;
});
//重新添加返回行
输出+='\n';
});
//对整个结果字符串的最终修复
输出=输出
.replace(/\\\;/g,“”)//恢复“两个单词类型”中的空格(被a替换)
.replace(//g,“>”)
控制台日志(输出);
}
//运行函数

翻译(输入)我喜欢正则表达式,但当它变得太复杂以至于无法读取时,可能是时候尝试另一种方法了。由于输入变量中的每个片段的结构都或多或少相同,因此可以尝试使用子字符串将字符串分成左右两部分。右边除分号以外的所有内容都可以放在大括号中,而您只需替换分号即可。在左边,您可以检查它是否以类型开头,并替换该位。剩下的部分可以放在它自己的支架中。如果你不明白,请告诉我,我会发布一个例子。