Javascript - 当字符串不匹配时

时间:2017-05-09 10:12:37

标签: javascript regex

我有这个例1:

myString = 'cdn.google.com/something.png';
console.log(myString.match(myString));

一切正常,但是当涉及到示例2时:

myString = 'cdn.google.com/something.png?231564';
console.log(myString.match(myString));

返回'null'的值。我不知道发生了什么..我搜索了关键字'一个字符串不匹配自己',一无所获。有人能帮助我吗?谢谢。

4 个答案:

答案 0 :(得分:2)

String#match方法会将参数视为正则表达式(如果不是则解析),其中.?具有特殊含义。

  1. .匹配任何字符(行终止符除外)
  2. ?量词 - 尽可能多次匹配0到1次,根据需要回馈
  3. 所以.不会引起任何问题,因为.可以用来匹配除了行之外的任何字符,但是?会因为它用来匹配任何零或一次性的任何字符字符。

    例如:.png?23 =>匹配.png23.pn23

    <小时/> 来自MDN docs

      

    如果传递了非RegExp对象obj,则使用新的RegExp(obj)将其隐式转换为RegExp。

    最好使用String#indexOf代替字符串返回索引,如果找不到则返回-1

    console.log(myString.indexOf(myString) > -1);
    

答案 1 :(得分:0)

在Javascript中匹配将String与RegEx进行比较。幸运的是,在你的第一个例子中,它有效。

我猜您正在寻找像localCompare这样的方法。

希望这有帮助!

答案 2 :(得分:0)

match()使用正则表达式模式搜索字符串。

所以

var s = "My String";
s.match(/Regex Here/);

将尝试匹配给定正则表达式的s。

在你的例子中: -

myString = 'cdn.google.com/something.png'; // It will be treated as regex
console.log(myString.match(myString));

myString = 'cdn.google.com/something.png?231564';  // It will be treated as regex , result differ because of ? 
console.log(myString.match(myString));

答案 3 :(得分:0)

您可以将参数转义为match,但是如果您这样做,则可以使用==来比较字符串。这篇文章包含一个正则表达式字符串转义函数:

How to escape regular expression in javascript?

RegExp.quote = function(str) {
    return (str+'').replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&");
};

可以像这样使用:

myString = 'cdn.google.com/something.png?231564';
console.log(myString.match(RegExp.quote
(myString)));

如果你想匹配问号后的任何数字,你可以这样做:

myString = 'cdn.google.com/something.png?';
console.log((myString+"18193819").match(RegExp.quote
(myString) + '\\d+'));