84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
var str1 = <summary>将标准格式的NameVal数组 如 (jQuery.serializeArray()返回值)格式化成JSON格式的Object\t\t 若data非数组 将返回空的Object {} \t\t</summary>
请问,这个是什么原因?为什么同样的字符串却不能匹配?
欢迎选择我的课程,让我们一起见证您的进步~~
字符串的match方法的第一个参数应该是是一个正则表达式对象,否则它将会用new RegExp()方法被隐式转换成正则表达式对象。你这个例子传入match的字符串中,存在着大量正则元字符,这些字符如果想匹配它们自身,都是需要被转义的,而new RegExp()不会帮你做这个转义的工作。
match
new RegExp()
举一个简单的例子:
var str1 = '(a.b()){}'; var str2 = str1; str1.match(str2); // null str2 = '\\(a\\.b\\(\\)\\)\\{\\}'; str1.match(str2); // [ '(a.b()){}', index: 0, input: '(a.b()){}' ] new RegExp(str2); // /\(a\.b\(\)\)\{\}/
注意,将字符串传入new RegExp()构造正则表达式对象的时候,字符串中的单个\会被忽略,必须用\\对它本身进行转义。
\
\\
字符串的
match
方法的第一个参数应该是是一个正则表达式对象,否则它将会用new RegExp()
方法被隐式转换成正则表达式对象。你这个例子传入match的字符串中,存在着大量正则元字符,这些字符如果想匹配它们自身,都是需要被转义的,而
new RegExp()
不会帮你做这个转义的工作。举一个简单的例子:
注意,将字符串传入
new RegExp()
构造正则表达式对象的时候,字符串中的单个\
会被忽略,必须用\\
对它本身进行转义。