深入理解JavaScript-replace
replace方法是屬於String物件的,可用於替換字串。
簡單介紹:
String.replace(searchValue,replaceValue)
- String:字串
- searchValue:字串或正規表示式
- replaceValue:字串或者函式
字串替換字串
'I am loser!'.replace('loser','hero')
//I am hero!
直接使用字串能讓自己從loser變成hero,但是如果有2個loser就不能一起變成hero了。
'I am loser,You are loser'.replace('loser','hero');
//I am hero,You are loser
正規表示式替換為字串
'I am loser,You are loser'.replace(/loser/g,'hero')
//I am hero,You are hero
使用正規表示式,並將正則的global屬性改為true則可以讓所有loser都變為hero
有趣的替換字元
replaceValue
可以是字串。如果字串中有幾個特定字元的話,會被轉換為特定字串。
字元 | 替換文字 |
---|---|
$& | 與正則相匹配的字串 |
$` | 匹配字串左邊的字元 |
$' | 匹配字串右邊的字元 |
$1,$2,$3,…,$n | 匹配結果中對應的分組匹配結果 |
使用$&字元給匹配字元加大括號
var sStr='討論一下正規表示式中的replace的用法';
sStr.replace(/正規表示式/,'{$&}');
//討論一下{正規表示式}中的replace的用法
使用$`和$'字元替換內容
'abc'.replace(/b/,"$`");//aac
'abc'.replace(/b/,"$'");//acc
使用分組匹配組合新的字串
'nimojs@126.com'.replace(/(.+)(@)(.*)/,"$2$1")//@nimojs
replaceValue引數可以是一個函式
String.replace(searchValue,replaceValue)
中的replaceValue可以是一個函式.
如果replaceValue是一個函式的話那麼,這個函式的arguments會有n+3個引數(n為正則匹配到的次數)
先看例子幫助理解:
function logArguments(){
console.log(arguments);//["nimojs@126.com", "nimojs", "@", "126.com", 0, "nimojs@126.com"]
return '返回值會替換掉匹配到的目標'
}
console.log(
'nimojs@126.com'.replace(/(.+)(@)(.*)/,logArguments)
)
引數分別為
- 匹配到的字串(此例為nimojs@126.com,推薦修改上面程式碼的正則來檢視匹配到的字元幫助理解)
- 如果正則使用了分組匹配就為多個否則無此引數。(此例的引數就分別為
"nimojs", "@", "126.com"
。推薦修改正則為/nimo/檢視控制檯中返回的arguments值) - 匹配字串的對應索引位置(此例為0)
- 原始字串(此例為nimojs@126.com)
使用自定義函式將A-G字串改為小寫
'JAVASCRIPT'.replace(/[A-G]/g,function(){
return arguments[0].toLowerCase();
})//JaVaScRIPT
使用自定義函式做回撥式替換將行內樣式中的單引號刪除
'<span style="font-family:\'微軟雅黑\';">;demo</span>'.replace(/\'[^']+\'/g,function(){
var sResult=arguments[0];
console.log(sResult);//'微軟雅黑'
sResult=sResult.replace(/\'/g,'');
console.log(sResult);//微軟雅黑
return sResult;
})//<span style="font-family:微軟雅黑;">demo</span>
最後的小試牛刀
這一節是交給閱讀者發揮的內容:
洗撲克
需要將ThisNimojs-JavaScript使用正則替換成 TJhaivsaNSicmroijpst
若作者顯示不是Nimo(被轉載了),請訪問Github原文進行討論:https://github.com/nimojs/blog/issues/2
相關文章
- 深入理解Isolate
- 深入理解HashMapHashMap
- 深入理解TransformORM
- 深入理解KVO
- 深入理解 JVMJVM
- 深入理解 GitGit
- 深入理解AQSAQS
- 深入理解JVMJVM
- 深入理解 TypeScriptTypeScript
- 深入理解JavaScriptCoreJavaScript
- 深入理解MVCMVC
- 深入理解 PWA
- 深入理解margin
- 深入理解ReactReact
- 深入理解BFC
- 深入理解reduxRedux
- BFC深入理解
- 深入理解 GCDGC
- 深入理解 requestAnimationFramerequestAnimationFrame
- 深入理解Eureka
- 深入理解copy
- AsyncTask深入理解
- 深入理解RunLoopOOP
- 深入理解Fsync
- 深入理解yield
- 深入理解MySQL索引MySql索引
- 深入理解ThreadLocalthread
- 深入理解JVM——物件JVM物件
- 對redis深入理解Redis
- 深入理解 ceph mgr
- 深入理解JavaScript原型JavaScript原型
- 深入理解 Event LoopOOP
- 深入理解Java PriorityQueueJava
- 深入理解vue元件Vue元件
- 深入理解 Java 方法Java
- 深入理解es module
- 深入理解 ReentrantLockReentrantLock
- 深入理解代理模式模式