正則位置匹配

正則表達(dá)式要么匹配字符,要么匹配位置。

一、字符串的位置

就是整個(gè)字符串前后和單個(gè)字符之間的位置,例如下圖:

二、正則表達(dá)式如何匹配位置

1、es5中匹配位置的正則:

^, $, \b, \B, (?=p), (?!p)

^ (脫字節(jié)),匹配字符串開始的位置。
$(美元符號(hào)),匹配字符串結(jié)尾的位置。
現(xiàn)在我么給"hello"前面和后面添加一個(gè)$符號(hào),例子如下:

var result = "hello".replace(/^|$/g, "$");
console.log(result)
// => $hello$
2、\b和\B

\b是單詞邊界,是\w和\W之間、\w和^之間、\w和$之間的位置。

比如一個(gè)文件名是"[JS] learn_01.md"中的\b,如下:

var str = "[JS] learn_01.md";
console.log(str.replace(/\b/g, "$"))
// => [$JS$] $learn_01$.$md$

我面可以分析一下上面的結(jié)果,\w正則表達(dá)式是[0-9a-zA-Z_]來表示,\W正好和\w相反是[^0-9a-zA-Z_],所以[ ,],.這三個(gè)字符與\w之間會(huì)添加#,字符串結(jié)尾是\w和$之間,所以也會(huì)添加上#。
我們把上面的例子中的\b替換成\B, 代碼如下:

var str = "[JS] learn_01.md";
console.log(str.replace(/\B/g, "$"))
VM92:2 $[J$S]$ l$e$a$r$n$_$0$1.m$d
3、 (?=p)和(?!p)

(?=p)中的p是一個(gè)子模式,即p前面的位置,比如(?=l),是l前面的位置。 例子如下:

var str = "hello";
console.log(str.replace(/(?=l)/g, "$"));
// => he$l$lo

(?!p)就是和(?=p)相反的意思, 例子如下:

var str = "hello";
console.log(str.replace(/(?!l)/g, "$"));
// => he$l$lo
4、案例分析

面試中遇到的一個(gè)題目,把"12345678",變成"12,345,678"。
(1)先讓他有一個(gè)逗號(hào),例子如下:

var str  = "12345678"
var result = str.replace(/(?=\d{3}$)/g, ',')
console.log(result); 
// => "12345,678"

(2) 弄出所有的逗號(hào), 例子如下:

var str = "12345678"
var result = str.replace(/(?=(\d{3})+$)/g, ',')
console.log(result)
// => "12,345,678"

(3)多驗(yàn)證幾下會(huì)出現(xiàn)問題

var str = "123456789"
var result = str.replace(/(?=(\d{3})+$)/g, ',')
console.log(result)
// => ",123,456,789"

我們并不需要最前面的那個(gè)逗號(hào),我們需要不讓匹配到最前面的位置,那就用(?!^)就可以解決,例子如下:

var str = "123456789"
var result = str.replace(/(?!^)(?=(\d{3})+$)/g, ',')
console.log(result)
// => "123,456,789"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 初衷:看了很多視頻、文章,最后卻通通忘記了,別人的知識(shí)依舊是別人的,自己卻什么都沒獲得。此系列文章旨在加深自己的印...
    DCbryant閱讀 4,060評(píng)論 0 20
  • 正則表達(dá)式到底是什么東西?字符是計(jì)算機(jī)軟件處理文字時(shí)最基本的單位,可能是字母,數(shù)字,標(biāo)點(diǎn)符號(hào),空格,換行符,漢字等...
    獅子挽歌閱讀 2,174評(píng)論 0 9
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,270評(píng)論 0 4
  • re模塊手冊(cè) 本模塊提供了和Perl里的正則表達(dá)式類似的功能,不關(guān)是正則表達(dá)式本身還是被搜索的字符串,都可以...
    喜歡吃栗子閱讀 4,050評(píng)論 0 13
  • 沒想到最近還有公司考這么沒創(chuàng)意的面試題啊,這題目的風(fēng)格明顯是兩年前最瘋狂的移動(dòng)互聯(lián)網(wǎng)時(shí)代的、iOS預(yù)備隊(duì)人數(shù)最多的...
    Miu七七閱讀 451評(píng)論 4 0