suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Javascript – Ich kann keinen regulären Ausdruck herausfinden, bitte helfen Sie mir

Code:

var match1 = new RegExp('\S*//weibo\.com/p/\S*');
var match2 = new RegExp('\S*//weibo\.com/p/\S+');

match1.test('http://weibo.com/p/12345/myfollow?relate=fans#place');//true
match2.test('http://weibo.com/p/12345/myfollow?relate=fans#place');//false

Ich bin ein wenig verwirrt, warum Match2 falsch ist und was zum Teufel stimmt mit Match1 überein?

天蓬老师天蓬老师2795 Tage vor430

Antworte allen(2)Ich werde antworten

  • 阿神

    阿神2017-05-19 10:33:59

    大兄弟,你的正则表达式写的有问题,首先正则表达式的构造有两种形式,一种是你这样,另一种是 /abc/g

    看你的意思,你的正则表达式应该这样写:

    var match1 = new RegExp('\\S*//weibo\.com/p/\\S*');
    var match2 = new RegExp('\\S*//weibo\.com/p/\\S+');
    

    你的少了反斜杠,转义失败

    为什么?因为按照你的正则表达式,实际上:

    var match1 = new RegExp('\S*//weibo\.com/p/\S*');
    match1.source;
    // "S*\/\/weibo.com\/p\/S*"
    

    然后就是 *+ 的区别了,所以第一个为 true,第二个为 false。

    建议构造正则表达式的时候用两个斜杠,这样可以不用转义:

    var match1 = /\S*\/\/weibo\.com\/p\/\S/;
    match1.source;
    // "\S*\/\/weibo\.com\/p\/\S"

    Antwort
    0
  • 黄舟

    黄舟2017-05-19 10:33:59

    match1:s匹配0个多1个或多个空格,//这个的话最好转义一下使用//这样匹配的才是'/',.这个匹配的是'.',如果没有反斜杠是匹配任意字符,最后一个s匹配0个多1个或多个空格。
    match2:只有最后一个不一样,s+,一个或多个空格,但是你的字符串明显在p之后没有空格所以false

    Antwort
    0
  • StornierenAntwort