假设我们希望匹配start
和end
之间的所有内容,但添加end
是可选的。如果我们知道结束将会存在它的简单
var re = /start(.*?)end/
我们如何使用可选结尾创建类似的正则表达式?我天真地尝试过失败
var re = /start(.*?)(end)?/
使我的案件清楚的一些断言:
re.exec("startA string end")[1] === "A string ";
re.exec("startA string ")[1] === "A string ";
答案 0 :(得分:3)
尝试强制存在end
或字符串结尾:
/start(.*?)(end|$)/
/start(.*?)(end)?/
的问题是(.*?)
无法匹配任何内容,因为它是懒惰的(尽可能少),并且由于end
是可选的,因此它不会强制它包含更多字符。