我有这个例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'的值。我不知道发生了什么..我搜索了关键字'一个字符串不匹配自己',一无所获。有人能帮助我吗?谢谢。
答案 0 :(得分:2)
String#match
方法会将参数视为正则表达式(如果不是则解析),其中.
和?
具有特殊含义。
.
匹配任何字符(行终止符除外)?
量词 - 尽可能多次匹配0到1次,根据需要回馈所以.
不会引起任何问题,因为.
可以用来匹配除了行之外的任何字符,但是?
会因为它用来匹配任何零或一次性的任何字符字符。
例如:.png?23
=>匹配.png23
或.pn23
如果传递了非RegExp对象obj,则使用新的RegExp(obj)将其隐式转换为RegExp。
最好使用String#indexOf
代替字符串返回索引,如果找不到则返回-1
。
console.log(myString.indexOf(myString) > -1);
答案 1 :(得分:0)
答案 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+'));