javascript regexp-在最后标记处拆分字符串

javascript regexp-在最后标记处拆分字符串,javascript,regex,Javascript,Regex,我试图为java脚本中的表达式输入提供自动完成功能 这些是相关的标记 + - * / [ ] [[ ]] ( ) ! != == . .* .^ ./ < > <= >= : , 我目前正在做Math.max(term.lastIndexOf(“,”),term.lastIndexOf(“,”),这是低效的,当令牌长度超过后一个长度时,它不会提供令牌。另外,如果某个令牌中有空格(这是合法的-例如[),它不会捕获它 我知道正则表达式专家对解析器有一个特别的偏好,所以我非常

我试图为java脚本中的表达式输入提供自动完成功能

这些是相关的标记

+ - * / [ ] [[ ]] ( ) ! != == . .* .^ ./ < > <= >= : ,
我目前正在做
Math.max(term.lastIndexOf(“,”),term.lastIndexOf(“,”)
,这是低效的,当令牌长度超过后一个长度时,它不会提供令牌。另外,如果某个令牌中有空格(这是合法的-例如
[
),它不会捕获它


我知道正则表达式专家对解析器有一个特别的偏好,所以我非常感谢您的帮助。

为每个标记编写表达式,并在捕获组中替换它们。避开需要的内容。将最长的放在第一位

然后可以匹配或拆分字符串。例如:

var re = /(\+|-|\*|\/|\[\[|\]\]|\[|\]|\(|\)|!=|!|==|\.\*|\.^|\.|\.\/|<=|>=|<|>|\:|\,)/;
var m = str.split(re);
if(m){
    var rhs = m.pop();
    var token = m.pop();
    var lhs = m.join("");
}
var re=/(\++-\*\\/\[\[\\\]\]\[\\\\]\[\\\]\[\\]\[\\]\(\\)\!==!=。\*.\.\\.\\.\/\=。\:\,)/;
var m=str.split(re);
如果(m){
var rhs=m.pop();
var token=m.pop();
var lhs=m.join(“”);
}

如果您想在
[[
之间允许可选空格,请相应地更改
\[\[\[
表达式(取决于空格的含义)。例如
\[\s*\[

感谢您的响应-尝试
X[[1
它生成lhs=X[,token=[,rhs=1它应该生成lhs=X,token=[[,rhs=1。我看到您已经将两位数的令牌放在正则表达式的第一位,尽管它仍然捕获了一位数的令牌-有没有办法让它变得贪婪?嘿,把它减少到最小值(还没有空格)
“X[[1”。match(/(*)(\[\[\\[)(.*)/)
生成
[“X[[1”,“X[”,“[”,“[”,“1”]
不是贪婪的。预期结果是
[X,[[1]
@haki,对。这是因为
*
是贪婪的。更新了答案。
var re = /(\+|-|\*|\/|\[\[|\]\]|\[|\]|\(|\)|!=|!|==|\.\*|\.^|\.|\.\/|<=|>=|<|>|\:|\,)/;
var m = str.split(re);
if(m){
    var rhs = m.pop();
    var token = m.pop();
    var lhs = m.join("");
}