Capitalize Regex Result from User
Capitalize Regex Result from User
在我的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。如果用户想要在replaceWith中使用多个反向引用,例如替换([aeiou])
和replaceWith $1$1
,我也希望这样做。它还应该能够有多个反向引用,例如用uppercase($1)$2
替换([a-zA-Z])([a-zA-Z]?)
。最后,当用户在replaceWith中同时具有大写和小写字母时,我希望它能够工作,就像这样:将([a-zA-Z']+,*)([.,?!'s]|)([a-zA-Z']+|)
替换为uppercase($1)$2lowercase($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];
});
相关文章:
- 解析-为什么user.getSessionToken()返回未定义的结果
- 我将如何将Base的原型分配给User
- Validate JSON from Mongo?
- Get JSON from an url
- creating objects from variables ES6
- getting id from jsp
- jquery使用name from变量按类选择元素
- Using jQuery with classes from ES6
- 如何计算与php中的CRC32函数兼容的arrayBuffer(javascript中的From FileReader)
- PassportJS/忘记密码:req.user只定义一次
- User getSessionToken() Returning Undefined
- 如何删除'被按压'state from复选框
- 当我的所有 Ng-from 都有效时启用一个按钮
- getDocument by id/get input text from button dons'不起作用
- Calling VB.Net from Javascript
- Blob from DataURL?
- PDF Generation from DOM?
- AWSELB Cookie access from Javascript
- getting int from User Javascript
- Capitalize Regex Result from User