我正在构建一个名为formula builder的东西。想法是,用户必须在textarea
中键入公式文本,然后我们将解析字符串值。结果是数组。
例如,将解析此文本
LADV-(GCNBIZ+UNIN)+(TNW*-1)
然后生成
下面的结果["LADV", "-", "(", "GCNBIZ", "+", "UNIN", ")", "+", "(", "TNW", "*", "-1", ")"]
重点是分割由此字符之一加入的每个单词:+
,*
,/
,-
,(
和此{ {1}};但仍然包括拆分器本身。
我尝试使用此表达式)
进行拆分,但结果并未包含拆分器字符。此外,/[-+*/()]/g
需要被检测为一个表达式。
-1
匹配正则表达式解决这个问题是什么?
答案 0 :(得分:2)
var input = 'LADV-(GCNBIZ+UNIN)+(TNW*-1)';
var match = input.match(/(-?\d+)|([a-z]+)|([-+*()\/])/gmi);
console.log(match);
答案 1 :(得分:1)
您可以使用match
代替split
替换正则表达式:
var s = 'LADV-(GCNBIZ+UNIN)+(TNW*-1)';
var m = s.match(/(-\d+(?:\.\d+)?|[-+\/*()]|\w+)/g);
console.log(m);
//=> ["LADV", "-", "(", "GCNBIZ", "+", "UNIN", ")", "+", "(", "TNW", "*", "-1", ")"]

RegEx分手:
( # start capture group
- # match a hyphen
\d+(?:\.\d+)? # match a number
| # OR
[-+\/*()] # match one of the symbols
| # OR
\w+ # match 1 or more word characters
) # end capture group
交替模式的顺序很重要。