|
|
请马上登录,朋友们都在花潮里等着你哦:)
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 马黑黑 于 2024-1-2 09:01 编辑
假如我们有一个算术的式子,例如像下面酱紫:
11+(22/8)
或酱紫:
11+(22/8)-798
现在,我们要将式子中的最后一部分变为平方值。目标是酱紫:
11+(22/8)²
11+(22/8)-798²
在变之前,我们得判断最后一部分是数字(如上面例二的 798)还是一个子算式(如上面例一的 (22/8)),因为二者的平方计算式子,构造方法不同。我们可以利用正则表达式来做一揽子的工作。
先从简单的开始,匹配末尾出现的连续的数字,正则表达式为:
(\d)+$
\d 是数字,我们用小括号将其包裹起来,这里是为了避免产生歧义。$ 表示行末(或一个字串的结尾)。
再匹配末尾出现的小括号对,我构建的匹配式子如下:
(\([0-9\+\-\*\/]+\))$
解释下:最外层小括号,是为了将来引用而加入的,这里只分析红色部分。\( 表示小括号开始,小括号是正则保留字符,要用 \ 转义,后续的加减乘除符号也酱紫转义;[0-9\+\-\*\/]+ 的意思是,数字和 +-*/ 出现一次或多次;\) 表示小括号收尾。加上 $ 限制了行末位置,这就可以匹配子算式了。
然后可以将上面两个正则用 | 连缀起来一用使用,| 表示 或者的意思,含义与JS的 || 一样。
下面是完整的示例,可以改变待转换式子查看效果:
<div id="mydiv"></div>
<script>
let str = '11+(22/8)'; /* 待检测算式 */
let strRes;
let regex = /(\([0-9\+\-\*\/]+\))$|((\d)+)$/g;
if(regex.test(str)) {
strRes = str.match(regex)[0];
str = str.replace(regex,'$1²');
}
mydiv.innerText = str;
</script>
这里只是一个个例,不过可以举一反三,或可给实际应用一些启发。
|
评分
-
| 参与人数 2 | 威望 +70 |
金钱 +140 |
经验 +70 |
收起
理由
|
红影
| + 50 |
+ 100 |
+ 50 |
赞一个! |
侃大山
| + 20 |
+ 40 |
+ 20 |
赞一个! |
查看全部评分
|