我需要创建一个匹配特定句子结构的正则表达式(使用Javascript)。在我的情况下,它是“课程###天###”,其中###可以是1到3的任何数字。此外,它可以是“周”而不是“天”,因此“课程###周###”也是有效的。

到目前为止,我想出了:

var regTest=/^(Course) \d{1,3} (day)|(week) \d{1,3}$/


问题在于该表达式匹配我想要的“课程9天1”,但是它也匹配“计划于07/01/09的课程9天1”。

换句话说,以下内容返回值0:

"Course 9 day 1".search(regTest)


但这也返回0:

"Course 9 day 1 scheduled on 07/01/09".search(regTest)


我希望第一个测试返回0,但是我希望第二个测试返回-1。我需要这种表达方式才能与每天/每周的###相匹配。您如何使其停止在那一点?

最佳答案

您需要在星期和星期之间将OR(管道)移到括号中:

/^(Course) \d{1,3} (day|week) \d{1,3}$/


如果管道在内部,则在该位置匹配“天”或“周”。如果管道不在括号内,则它匹配表达式的前半部分(即“ Course ### day”)或表达式的后半部分(即“ week ###”)。

另外,如果您只是想验证字符串是否与模式匹配,则可以使用“测试”而不是“搜索”:

if(/^(Course) \d{1,3} (day|week) \d{1,3}$/.test(someString)) {
    // it matches!
}

08-07 23:41
查看更多