最后获得字符串"。"可能包含"。"

时间:2015-06-26 22:49:45

标签: javascript split

我有这个字符串:

λx.λy.Math.pow(x,y)

我想得到:

Math.pow(x,y)

基本上是.λ之后的所有内容。最后一部分还可能包含λ

λx.λy.print("λ"+x+".λ"+y)

1 个答案:

答案 0 :(得分:1)

以下正则表达式应该有效:

/((λ.+?)\.)+([^λ].*)/

正则表达式需要一系列以λ开头的单词,由.分隔,直到找到一个不以λ开头的单词。找到该单词后,最后一组将匹配 - 您正在寻找的组。

示例:

var
    re = /((λ.+?)\.)+([^λ].*)/,
    m,
    test1 = 'λx.λy.Math.pow(x,y)',
    test2 = 'λx.λy.print("λ"+x+".λ"+y)',
    test3 = 'λx.λy.λx.λy.λx.λfoo.λa.λz.print("λ"+x+".λ"+y)';

console.info(test1.match(re).pop()); // prints 'Math.pow(x,y)'
console.info(test2.match(re).pop()); // prints 'print("λ"+x+".λ"+y)'
console.info(test3.match(re).pop()); // prints 'print("λ"+x+".λ"+y)'

您应该始终寻找最后一组。当然,你应该先检查一下比赛:

var
    re = /((λ.+?)\.)+([^λ].*)/,
    m,
    test4 = "won't match";

m = test4.match(re);

if (m) {
    console.info(m.pop());
} else {
    console.info('No match found');
}

在此处查看:https://jsfiddle.net/luciopaiva/0ty4z2kb/