【发布时间】:2014-05-14 08:28:36
【问题描述】:
我想在数学表达式中找到未包含在 { 和 } 之间的元素
示例:
输入:
abc+1*def
匹配:["abc", "1", "def"]输入:
{abc}+1+def
匹配:["1", "def"]输入:
abc+(1+def)
匹配:["abc", "1", "def"]输入:
abc+(1+{def})
匹配:["abc", "1"]输入:
abc def+(1.1+{ghi})
匹配:["abc def", "1.1"]输入:
1.1-{abc def}
匹配:["1.1"]
规则
- 表达式格式正确。 (所以没有右括号就没有开始括号,或者没有
}就没有开始{) - 表达式中允许的数学符号为
+-/*和() - 数字可以是小数。
- 变量可以包含空格。
- 只有一层
{}(无嵌套括号)
到目前为止,我的结尾是:http://regex101.com/r/gU0dO4
(^[^/*+({})-]+|(?:[/*+({})-])[^/*+({})-]+(?:[/*+({})-])|[^/*+({})-]+$)
我把任务分成3份:
- 匹配字符串开头的元素
- 匹配两个 { 和 } 之间的元素
- 匹配字符串末尾的元素
但它并没有按预期工作。
有什么想法吗?
【问题讨论】:
-
考虑另一种方式作为第一步(也是独立的) - 将所有“{..}”替换为“”。
-
使用正则表达式来验证括号对已经很复杂了,为了维护者的理智考虑在正则表达式中执行它的替代方法。
-
我不想验证表达式,我确定表达式有效。我只想获取未包含在 { 和 } 之间的令牌。
-
您只有一层 { } 还是可以进行深度嵌套(这会改变一切并需要解析)?
-
这真的改变了一切......
标签: javascript regex