将 $' 值传递给替换的关联参数函数
pass $` value to associated parameter function of replace
我有一个表达式说
日志(1,3)+4,5+最大(7,8,9)
其中逗号以两种方式使用。
1-在"log(1,3)+4,5"中,逗号用于代替点(.)或小数符号。"log(1,3)+4,5" 相当于 "log(1.3)+4.5"。
2-在max(7,8,9)中,它被用作数字分隔符。 即这个结果是 9 ; 最大数量。
我的问题是替换逗号; 用作小数分隔符; 与十进制,但这应该不会影响 max(7,8,9)。 即我需要将上面的表达式转换为
日志(1.3)+4.5+最大(7,8,9)
我试过了——
function substitute(expr) {
expr.replace(/,/g, function ($`) {
/*some processing here to decide whether comma to be substituted with dot or not.On that basis I will return either dot or comma.*/
}
但是如何将 $' 值传递给相关函数或是否可以在javascript中执行此操作。
expr.replace(/,/g,function ($`) {
如果是,那如何?
你的语言模棱两可。
max(8,1,8,2)
这是否返回8
、8,1
或8,2
?
你的语言看起来也不规则,所以你不能用正则表达式来解析它,你需要上下文。如果允许这样的事情:
max(1,max(2,3)) // 3?
假设您可以摆脱歧义,您可以编写一个解析器来执行上下文检测。
这可能是一个解决方案:
function myFilter(string) {
// save all functions and signs
var functions = [];
var regExp = /[+,-]max'(([^')]+)')/;
matches = true;
while (matches !== null) {
var matches = regExp.exec(string);
if (matches !== null) {
functions.push(matches[0]);
string = string.replace(matches[0], '');
}
}
// replace all remaining commas with dots
string = string.replace(/,/g , ".");
for (i in functions) {
string += functions[i];
}
return string;
}
var s = '1,3+4,5+max(7,8,9)-max(2,3,5)';
var filteredString = myFilter(s);
jsFiddle 演示
这目前适用于多个max
功能,但仅适用于+
和-
符号。它可以通过*
、/
等方式进行改进......你必须找到好的正则表达式。
使用 Javascript 尝试以下操作。希望这对您的逻辑有所帮助。
在这里演示
var value = "log(1,3)-4,5+max(7,8,9)";
var val = '';
var splitValue, appendSym;
if (value.indexOf("+") != -1)
{
splitValue = value.split("+");
appendSym = "+";
}
else if(value.indexOf("-") != -1)
{
splitValue = value.split("-");
appendSym = "-";
}
else if(value.indexOf("*") != -1)
{
splitValue = value.split("*");
appendSym = "*";
}
else
{
splitValue = value.split("/");
appendSym = "/";
}
var length = splitValue.length;
for (var i = 0; i < length; i++) {
if (val) val += appendSym;
var strrep = splitValue[i].replace(/,/g,".");
if (splitValue[i].indexOf("max") != -1 || splitValue[i].indexOf("min") != -1)
{
val+=splitValue[i];
}
else
{
val+=strrep;
}
}
alert(val);
上述代码的输出log(1.3)-4.5+max(7,8,9)
相关文章:
- 无法从 jQuery RSS Feed 中的 localStorage 动态替换类
- 我如何找到一个句子中的所有空格并替换忽略它们
- 如何用更合适的内容替换document.write
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 在DOM中查找一个模式并替换它's的内容使用jquery
- 用空格替换下划线PHP
- str.split(someString).join(someOtherString)是否等效于替换
- 使用javascript的图像替换循环
- window.location替换并传递URL历史记录条目中的变量
- 替换标记中的属性
- 指令的模板必须只有一个根元素:With restrict E&替换true
- AngularJs对ng消息的自定义替换
- 用超链接替换URLS
- 用cdata标记替换脚本标记
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- 在javascript中,I'我很难弄清楚如何让regex只替换捕获而不替换匹配
- 替换url中变量的值
- 将 $' 值传递给替换的关联参数函数
- 替换关联数组变量
- regex替换为(regex模式的)关联数组