匹配start字符串和可能的终止字符串之间的所有内容

时间:2014-04-11 22:03:51

标签: javascript regex

假设我们希望匹配startend之间的所有内容,但添加end是可选的。如果我们知道结束将会存在它的简单

var re = /start(.*?)end/

我们如何使用可选结尾创建类似的正则表达式?我天真地尝试过失败

var re = /start(.*?)(end)?/

使我的案件清楚的一些断言:

re.exec("startA string end")[1] === "A string ";
re.exec("startA string ")[1] === "A string ";

1 个答案:

答案 0 :(得分:3)

尝试强制存在end或字符串结尾:

/start(.*?)(end|$)/

/start(.*?)(end)?/的问题是(.*?)无法匹配任何内容,因为它是懒惰的(尽可能少),并且由于end是可选的,因此它不会强制它包含更多字符。