将javascript中的线性字符串替换操作更改为数组
Change linear string replace operations to array in javascript
我想将以下代码更改为数组,因为每当我想添加要替换的新字符串时,我必须编写"roman_ok"+number
。如果你有几百个字符串要添加,这就不方便了。有人能告诉我怎么做吗?
function roman_conversion(format) {
var roman_ok = format.replace(/./gm, convert_text);
var roman_ok2 = roman_ok.replace(/l%r/g, "ll");
var roman_ok3 = roman_ok2.replace(/l%n/g, "ll");
var roman_ok4 = roman_ok3.replace(/nr/g, "ll");
var roman_ok5 = roman_ok4.replace(/l%y/g, "ry");
var roman_ok6 = roman_ok5.replace(/l%w/g, "rw");
var roman_ok7 = roman_ok6.replace(/kn/g, "ngn");
var roman_ok8 = roman_ok7.replace(/kr/g, "ngn");
var roman_ok9 = roman_ok8.replace(/km/g, "ngm");
var roman_ok10 = roman_ok9.replace(/tn/g, "nn");
var roman_ok11 = roman_ok10.replace(/tr/g, "nn");
var roman_ok12 = roman_ok11.replace(/tm/g, "nm");
var roman_ok13 = roman_ok12.replace(/mr/g, "mn");
var roman_ok14 = roman_ok13.replace(/pn/g, "mn");
var roman_ok15 = roman_ok14.replace(/pr/g, "mn");
var roman_ok16 = roman_ok15.replace(/pm/g, "mm");
var roman_ok17 = roman_ok16.replace(/ngr/g, "ngn");
return roman_ok17;
您可以使用reduce
:
var replacements = [[/foo/, 'bar'], [/baz/, 'quux'], ...];
function roman_conversion(format) {
return replacements.reduce((prev, curr) => prev.replace(curr[0], curr[1]), format);
}
编辑:此处使用ES6箭头函数语法,请随意替换为function(prev, curr) { ... }
这可能是你想要的
function Replacement(pattern, replacement) {
this.pattern = pattern;
this.replacement = replacement;
}
var replacements = [
// new Replacement(new RegExp('.', 'gm'), convert_text),
new Replacement(new RegExp("l%r", "g"), "ll"),
new Replacement(new RegExp("l%n", "g"), "ll"),
new Replacement(new RegExp("nr", "g"), "ll"),
new Replacement(new RegExp("l%y", "g"), "ry"),
new Replacement(new RegExp("l%w", "g"), "rw"),
new Replacement(new RegExp("kn", "g"), "ngn"),
new Replacement(new RegExp("kr", "g"), "ngn"),
new Replacement(new RegExp("km", "g"), "ngm"),
new Replacement(new RegExp("tn", "g"), "nn"),
new Replacement(new RegExp("tr", "g"), "nn"),
new Replacement(new RegExp("tm", "g"), "nm"),
new Replacement(new RegExp("mr", "g"), "mn"),
new Replacement(new RegExp("pn", "g"), "mn"),
new Replacement(new RegExp("pr", "g"), "mn"),
new Replacement(new RegExp("pm", "g"), "mm"),
new Replacement(new RegExp("ngr", "g"), "ngn"),
];
function roman_conversion(string) {
return replacements.reduce(
function(previous, current) {
return previous.replace(current.pattern, current.replacement);
}, string);
}
对我来说最简单的答案是评论里的Trincot:
请注意,您不必使用这些中间变量。您可以直接链接replace调用:
return format.replace(/aa/, 'bb').replace(/cc/, 'dd').replace ............ ;
还要注意,替换可能会产生再次被以下替换之一所替换的东西。了解确切的情况可能有助于找到更好的方法来解决这个问题。
——trincot Aug 14 at 6:50
相关文章:
- 将数组对象传递到struts2中的操作类
- 响应应包含一个对象,但得到的却是GET操作的数组
- Var工作,但在使用数组执行相同操作时停止
- 使用查询将对象数组发布到asp.net-mvc控制器操作的正确方法是什么
- findAndModify,如何对文档进行操作's数组搜索对象并更改字段值
- ASP.NET MVC:2d数组在从javascript传递到MVC控制器操作后为null
- 使用纯JavaScript或Lodash的JSON数组操作
- 通过javascript将包含数组的对象数组传递给MVC操作
- 操作(str.replace)通过自动完成返回的数组数据
- 在 MVC3 控制器操作中获取 JavaScript 推送对象数组
- 将带有字符串的 javascript 数组发送到 php 操作
- 转置数组时收到“回调函数不支持此操作”错误
- 将数字存储在数组中会混淆如何根据值而不是索引来操作这些项目
- Ajax 无法使用带有 2D 数组参数的 C# 控制器操作
- AngularJS和REST:执行删除操作,发送许多要删除的项目的数组
- 数组的逻辑操作以删除索引
- 子数组内的Mongodb更新操作
- 如果数组中存在 URL,请执行某些操作
- 使用 jquery 操作 JSON 数组
- 使用 JSON 从 JavaScript/jQuery 中的 PHP 获取数组,然后对其进行操作