可以说我们要匹配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 ";
最佳答案
尝试强加end
或字符串结尾:
/start(.*?)(end|$)/
/start(.*?)(end)?/
的问题在于(.*?)
不会匹配任何内容,因为它是惰性的(尽可能少的次数),并且由于end
是可选的,因此不会强制其包含更多字符。