Rumah > Soal Jawab > teks badan
Kod:
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
Saya agak keliru, kenapa match2 itu palsu, dan apa yang match1 match?
阿神2017-05-19 10:33:59
Saudara, ada sesuatu yang tidak kena dengan ekspresi biasa anda Pertama sekali, terdapat dua bentuk pembinaan ekspresi biasa, satu seperti milik anda, dan satu lagi ialah /abc/g
. /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*"
然后就是 *
和 +
var match1 = /\S*\/\/weibo\.com\/p\/\S/;
match1.source;
// "\S*\/\/weibo\.com\/p\/\S"
Milik anda tiada garis miring ke belakang, gagal melarikan diri🎜
🎜Kenapa? Kerana menurut ungkapan biasa anda, sebenarnya: 🎜
rrreee
🎜Kemudian terdapat perbezaan antara *
dan +
, jadi yang pertama adalah benar dan yang kedua adalah palsu. 🎜
🎜Adalah disyorkan untuk menggunakan dua garis miring semasa membina ungkapan biasa, supaya tidak perlu melarikan diri: 🎜
rrreee黄舟2017-05-19 10:33:59
match1: s sepadan dengan 0 hingga 1 atau lebih ruang //Sebaik-baiknya untuk melarikan diri ini dan gunakan // supaya yang dipadankan ialah '/' Ini sepadan dengan '.', jika tiada garis serong ke belakang watak, dan s terakhir sepadan dengan 0 hingga 1 atau lebih ruang.
match2: Hanya yang terakhir berbeza, s+, satu atau lebih ruang, tetapi rentetan anda jelas tidak mempunyai ruang selepas p, jadi ia adalah palsu