【问题标题】:RegEx does match in Expresso but doesn't in JavaScriptRegEx 在 Expresso 中匹配,但在 JavaScript 中不匹配
【发布时间】:2012-05-04 09:00:18
【问题描述】:

我在 Expresso 的帮助下编写了一个正则表达式。它与我的所有示例匹配,因此我将其复制到我的 JavaScript 代码中。它与我的示例之一不匹配,但为什么呢?

正则表达式:

^(\d{1,2}):?(\d\d)?\s*-\s*(\d{1,2}):?(\d\d)?$

应该匹配:

10-12
10:00-12:00
1000-1200

在 JavaScript 中,10:00-12:00 不适用于所有浏览器,如 IE9、Chrome、Firefox。 有什么想法吗?

更新(JavaScript 代码): input.match(/^(\d{1,2}):?(\d\d)?\s*-\s*(\d{1,2}):?(\d\d)?$ /);

更新(已解决): 由于一些预过滤,代码从未到达。对不起!

【问题讨论】:

  • 我的印象是,发布用于测试的 JavaScript 代码(而不仅仅是表达式)将有助于诊断问题。
  • 你是对的。几秒钟前添加了 JS。
  • 哦,不,我是这样的我**t :-) 忘记了一些预过滤,所以代码从未到达。对不起大家*尴尬
  • @philipooo:您可以删除自己的问题以避免进一步的尴尬:)

标签: javascript regex parsing browser


【解决方案1】:

现在在 Chrome 中测试它,它似乎可以工作:

var exp = /^(\d{1,2}):?(\d\d)?\s*-\s*(\d{1,2}):?(\d\d)?$/;
exp.test('10-12') // true
exp.test('10:00-12:00') // true
exp.test('1000-1200') // true
exp.test('1000-12005') // false

【讨论】:

    【解决方案2】:

    在 Javascript 代码中放置表达式时是否转义了 \'s?

    当将其嵌入为字符串时,您最终会编写:

      var expression = "^(\\d{1,2}):?(\\d\\d)?\\s* etc
    

    【讨论】:

    • ... 或者只使用本机类型语法:var expression = /^(\d{1,2}):?(\d\d)?\s*-\s*(\d{1,2}):?(\d\d)?$/;
    • 我使用原生语法。将js代码添加到开头的帖子中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    相关资源
    最近更新 更多