gpt4 book ai didi

javascript - 将用户的正则表达式结果大写

转载 作者:行者123 更新时间:2023-12-03 12:04:02 24 4
gpt4 key购买 nike

在我的nodejs(javascript)程序中,用户可以输入文本并使用他们输入的正则表达式进行更改。我还希望用户能够输入大写或小写的文本。如果用户输入字符串“StackOverflow is Great!”、正则表达式(.),并将其设置为大写($1),则程序应返回“STACKOVERFLOW IS GREAT!”我可以这样做:

    var text = "StackOverflow is great!";
var regexp = new RegExp("(.)", "g");
var replaceWith = "uppercase($1)";
var uppercaseMatch = /uppercase\(([^)]+)\)/g.test(replaceWith);
var lowercaseMatch = /lowercase\(([^)]+)\)/g.test(replaceWith);
var result = text.replace(regexp, function() {
var argsCount = arguments.length;
if(uppercaseMatch) {
if(argsCount === 5) {
return arguments[1].toUpperCase() + arguments[2];
} else if (argsCount === 4) {
return arguments[1].toUpperCase();
}
} else if (lowercaseMatch) {
if(argsCount === 5) {
return arguments[1].tolowerCase() + arguments[2];
} else if (argsCount === 4) {
return arguments[1].tolowerCase();
}
} else {
if(argsCount === 5) {
return arguments[1] + arguments[2];
} else if (argsCount === 4) {
return arguments[1];
} else if (argsCount === 3) {
return replaceWith;
}
}

});
console.log(result);

如果他们小写字符串,它也会起作用,然后它将返回“stackoverflow is Great!”如果他们不输入任何大写或小写文本,例如 [oO] 作为正则表达式,0 作为replaceWith,此代码也将正确运行。但是,它不适用于 \b(\w) 作为正则表达式,以及 uppercase($1) 作为替换。如果用户想在replaceWith中使用多个反向引用,例如替换([aeiou])和replaceWith $1$1,我也希望它能够工作。它还应该能够有多个反向引用,例如将 ([a-zA-Z])([a-zA-Z]?) 替换为 uppercase($1)$2 。最后,我希望当用户在replaceWith中同时有大写和小写时它能够工作,如下所示:replace ([a-zA-Z']+,*)([.,?!\s]| )([a-zA-Z']+|)大写($1)$2小写($3)

最佳答案

我可以建议这样的事情:

function fnReplace(regex, from, to) {
return from.replace(regex, function() {
var args = [].slice.call(arguments, 0);
return to.replace(/(\w+)\(\$(\d+)\)|\$(\d+)/g, function(_, fn, a1, a2) {
return fn ? args[a1][fn]() : args[a2];
});
});
}

示例:

s = fnReplace(
/(\w+) (\w+)/,
'hello THERE',
'toUpperCase($1) + toLowerCase($2) + $2 $1');

console.log(s) // HELLO + there + THERE hello

它允许替换任意字符串函数:

s = fnReplace(
/(\w+) (\w+)/,
'hello THERE',
'bold($1) + sup($2)');

// <b>hello</b> + <sup>THERE</sup>

如果不需要,请将内部正则表达式更改为:

return to.replace(/(toUpperCase|toLowerCase|...)\(\$(\d+)\)|\$(\d+)/g, function(_, fn, a1, a2) {
return fn ? args[a1][fn]() : args[a2];
});

关于javascript - 将用户的正则表达式结果大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25266679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com