【问题标题】:Regex isn't matching on Javascript .split() but does match on testing tool正则表达式在 Javascript .split() 上不匹配,但在测试工具上匹配
【发布时间】:2016-08-31 22:13:17
【问题描述】:

我有这个代码。我正在尝试匹配 .mono-50,其中 50 可以是任意数字。

imageUrl = 'http://example.com/media/image.mono-50.png';
imageUrlSplit = imageUrl.split('/.mono-\d+/');
console.log(imageUrlSplit);

这不匹配,但在我的测试工具 regexr.com 上匹配

http://regexr.com/3e55b

我对它做了很多变化,包括以下内容。

.split('/.mono\-\d+/');
.split('/\.mono\-\d+/');
.split('/.mono-\d+/g');
.split('/.mono\-\d+/g');
.split('/\.mono\-\d+/g');

所有这些都在工具中工作,但在 Javascript 中没有。我对.split() 如何处理正则表达式有误解吗?

我看过这个问题,但它并没有帮助我解决这个问题。

Javascript split regex question

【问题讨论】:

  • 删除单引号,因为您要拆分的是字符串而不是模式。
  • @Trey:不仅如此。点也必须转义。 OP不确定是否必须转义。
  • @WiktorStribiżew 正确,但他在一些尝试中逃脱了他们,所以我没有提到它
  • '/\.mono\-\d+/g' -> 以正斜杠开头的文字字符串包含“mono”并以正斜杠和“g”结尾。 /\.mono\-\d+/g 匹配包含文字点的模式的正则表达式,后跟“单”破折号和任意数量的数字。
  • 如果点未转义,则'http://example.com/media/demono-60/image.mono-50.png' 将被错误地拆分。 @Vld:全局行为默认为split()。第二个参数控制分裂的那一侧。

标签: javascript regex split


【解决方案1】:

您需要使用正则表达式文字表示法(当正则表达式文字放在引号内时,它将成为常规字符串文字,split 将此文本用作文字字符串,而不是模式)并 转义点 因为正则表达式模式中未转义的点匹配任何字符(但换行符除外):

imageUrlSplit = imageUrl.split(/\.mono-\d+/);
                               ^^^        ^

查看演示:

imageUrl = 'http://example.com/media/image.mono-50.png';
imageUrlSplit = imageUrl.split(/\.mono-\d+/);
console.log(imageUrlSplit);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多