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