使用正则表达式和JavaScript获取字符串中的完全匹配

马库斯·帕森斯

我试图从给定的字符串中获得完全匹配的内容,然后操纵该字符串。我有一个相当大的计算器程序,您可以在这里看到:http : //www.marcusparsons.com/projects/calculator主页上还没有任何内容,并且原始代码很长。

目标是在计算器中实现一个功能,其中不必在数学对象/方法之前添加数学前缀。在我添加了一个允许用户使用“ acosh()”方法(和实验方法)的功能之前,无论它是否在浏览器中实现(ehem ... IE),它的作用都很大。我遇到的问题是我现在要用aMath.cosh()“替换” acosh“的算法,因为它在” acosh“内看到” cos“。

因此,当我将字符串“ acosh(1)+ cos(pi / 3)”传递给它时,它变成了“ aMath.cosh(1)+ cos(Math.PI / 3)”。

编辑:上面的字符串应为“ acosh(1)+ Math.cos(Math.PI / 3)”。

我是正则表达式的新手,我想这就是我的问题所在。

这是示例代码:http : //jsfiddle.net/mparson8/2ej5n3u4/4/

var $mathKeywords = ["E", "LN2", "LN10", "LOG2E", "LOG10E", "PI", "SQRT1_2", "SQRT2", "abs", "acos", "asin", "asinh", "atan", "atan2", "atanh", "cbrt", "ceil", "clz32", "cos", "exp", "expm1", "floor", "fround", "hypot", "imul", "log1p", "log10", "log2", "max", "min", "pow", "random", "round", "sin", "sinh", "sqrt", "tan", "tanh", "trunc"];

var $resultVal = "acosh(1)+cos(PI/3)".toLowerCase();
try {
//Iterate over each Math object/method
$.each($mathKeywords, function (i, val) {
    //Convert val within array to a lower case form
    var $lowerKey = val.toLowerCase();
    //The regex pattern I came up with
    var pattern = new RegExp("(^|\\W)" + $lowerKey + "($|\\W)");
    //See if pattern gives a match within $resultVal
    var $location = $resultVal.match(pattern);
    //Math keyword is found
    if ($location != null) {
        //replace the lowercase version of the math keyword with its properly cased version prepended 
        //with Math. i.e. cos becomes Math.cos and pi becomes Math.PI
        $resultVal = $resultVal.replace($lowerKey, "Math." + val);
    }
});
//Set the result element's value to an evaluation of $resultVal
//A better implementation of the eval exists within the calc program
alert($resultVal);
alert(eval($resultVal));
} catch (err) {
alert("Error: Cannot process expression due to " + err + ".");
}

我感谢所有帮助!:)

太平

如果您想继续使用正则表达式,这似乎可行:

var $mathKeywords = ["E", "LN2", "LN10", "LOG2E", "LOG10E", "PI", "SQRT1_2", "SQRT2", "abs", "acos", "asin", "asinh", "atan", "atan2", "atanh", "cbrt", "ceil", "clz32", "cos", "exp", "expm1", "floor", "fround", "hypot", "imul", "log1p", "log10", "log2", "max", "min", "pow", "random", "round", "sin", "sinh", "sqrt", "tan", "tanh", "trunc"];

var $resultVal = "acosh(1)+cos(PI/3)".toLowerCase();
try {
    //Iterate over each Math object/method
    $.each($mathKeywords, function (i, val) {
        //Convert val within array to a lower case form
        var $lowerKey = val.toLowerCase();
        var pattern = new RegExp("\\b" + $lowerKey + "\\b", "g");
        //See if pattern gives a match within $resultVal
        var $location = $resultVal.match(pattern);
        //Math keyword is found
        if ($location != null) {
            //replace the lowercase version of the math keyword with its properly cased version prepended 
            //with Math. i.e. cos becomes Math.cos and pi becomes Math.PI
            $resultVal = $resultVal.replace(pattern, "Math." + val);
        }
    });
    //Set the result element's value to an evaluation of $resultVal
    //A better implementation of the eval exists within the calc program
    console.log($resultVal);
    console.log(eval($resultVal));
} catch (err) {
    alert("Error: Cannot process expression due to " + err + ".");
}

输出:

acosh(1)+Math.cos(Math.PI/3)

(实际上是,Error: Cannot process expression due to ReferenceError: acosh is not defined.但您明白了)


变化:

  • 使用\b的单词边界
  • 在替换中使用模式(带有单词边界)
  • 使用g标志替换所有出现的事件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用正则表达式和JavaScript获取字符串中的完全匹配

来自分类Dev

使用bash和正则表达式获取字符串中的数字

来自分类Dev

使用正则表达式获取字符串中的两个匹配项

来自分类Dev

正则表达式在JavaScript中获取字符串的多个段

来自分类Dev

在VBA中使用正则表达式仅获取字符串中的数字

来自分类Dev

使用javascript正则表达式获取字符串中的最后一个数字

来自分类Dev

正则表达式:获取字符串的匹配部分和“不匹配”部分

来自分类Dev

使用正则表达式顺序匹配正则表达式,而不是JavaScript中的字符串顺序

来自分类Dev

从正则表达式获取字符串中的字符串

来自分类Dev

正则表达式从字符串中获取字符串

来自分类Dev

如何使用正则表达式从框架中定义的输入字符串中获取字符串

来自分类Dev

正则表达式匹配并通过模式JAVA获取字符串

来自分类Dev

使用正则表达式从字符串中的提取字符串

来自分类Dev

使用 Gsub 获取 R 中匹配的字符串 - 正则表达式

来自分类Dev

使用JavaScript正则表达式匹配和替换字符串

来自分类Dev

如何在正则表达式中获取字符串并在匹配字符串后删除其他字符串

来自分类Dev

如何使用正则表达式从列表中提取字符串匹配项?

来自分类Dev

如何使用正则表达式提取字符串的不匹配部分

来自分类Dev

使用正则表达式获取字符串中的特定字符并删除未使用的零

来自分类Dev

正则表达式获取字符串和下划线之间的数值

来自分类Dev

正则表达式在冒号之前和之后获取字符串

来自分类Dev

为什么使用正则表达式。*?只匹配javascript中的空字符串?

来自分类Dev

正则表达式获取字符串中的十进制值

来自分类Dev

在正则表达式的描述内容中未获取字符串

来自分类Dev

从正则表达式()中获取字符串的行为不符合预期

来自分类Dev

获取字符串正则表达式中的完整值

来自分类Dev

正则表达式从Nodejs中的`({#word#})`获取字符串'word'

来自分类Dev

JavaScript正则表达式-从无限数量的花括号中获取字符串

来自分类Dev

JavaScript正则表达式-从无限数量的花括号中获取字符串

Related 相关文章

  1. 1

    使用正则表达式和JavaScript获取字符串中的完全匹配

  2. 2

    使用bash和正则表达式获取字符串中的数字

  3. 3

    使用正则表达式获取字符串中的两个匹配项

  4. 4

    正则表达式在JavaScript中获取字符串的多个段

  5. 5

    在VBA中使用正则表达式仅获取字符串中的数字

  6. 6

    使用javascript正则表达式获取字符串中的最后一个数字

  7. 7

    正则表达式:获取字符串的匹配部分和“不匹配”部分

  8. 8

    使用正则表达式顺序匹配正则表达式,而不是JavaScript中的字符串顺序

  9. 9

    从正则表达式获取字符串中的字符串

  10. 10

    正则表达式从字符串中获取字符串

  11. 11

    如何使用正则表达式从框架中定义的输入字符串中获取字符串

  12. 12

    正则表达式匹配并通过模式JAVA获取字符串

  13. 13

    使用正则表达式从字符串中的提取字符串

  14. 14

    使用 Gsub 获取 R 中匹配的字符串 - 正则表达式

  15. 15

    使用JavaScript正则表达式匹配和替换字符串

  16. 16

    如何在正则表达式中获取字符串并在匹配字符串后删除其他字符串

  17. 17

    如何使用正则表达式从列表中提取字符串匹配项?

  18. 18

    如何使用正则表达式提取字符串的不匹配部分

  19. 19

    使用正则表达式获取字符串中的特定字符并删除未使用的零

  20. 20

    正则表达式获取字符串和下划线之间的数值

  21. 21

    正则表达式在冒号之前和之后获取字符串

  22. 22

    为什么使用正则表达式。*?只匹配javascript中的空字符串?

  23. 23

    正则表达式获取字符串中的十进制值

  24. 24

    在正则表达式的描述内容中未获取字符串

  25. 25

    从正则表达式()中获取字符串的行为不符合预期

  26. 26

    获取字符串正则表达式中的完整值

  27. 27

    正则表达式从Nodejs中的`({#word#})`获取字符串'word'

  28. 28

    JavaScript正则表达式-从无限数量的花括号中获取字符串

  29. 29

    JavaScript正则表达式-从无限数量的花括号中获取字符串

热门标签

归档