Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

第十五天:正则表达式 #17

Open
sofish opened this issue May 16, 2016 · 1 comment
Open

第十五天:正则表达式 #17

sofish opened this issue May 16, 2016 · 1 comment
Milestone

Comments

@sofish
Copy link
Owner

sofish commented May 16, 2016

在处理字符串的时候,正则就非常有用。今天老婆又开始看文章了,所以我也开始更新了。举个例子,处理模板,在没有多行模板的时候,我通常会选择这样做:

var person = { name: 'sofish', bio: 'a programmer'};
var tmpl = 'This is {name} and he is {bio}.';
var output = tmpl.replace(/\{(\w+)\}/g, function(match, group1) { 
  return person[group1] || '';
});
console.log(output);

关于正式的基础,字面量、ExpReg 对象,exec test search match replace 等方面的使用,可以看这篇文章:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions

@sofish sofish added this to the Daily Post milestone May 16, 2016
@nimoc
Copy link

nimoc commented Sep 2, 2016

深入理解JavaScript-replace

replace方法是属于String对象的,可用于替换字符串。

简单介绍:

String.replace(searchValue,replaceValue)

  1. String:字符串
  2. searchValue:字符串或正则表达式
  3. 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)
)

参数分别为

  1. 匹配到的字符串(此例为nimojs@126.com,推荐修改上面代码的正则来查看匹配到的字符帮助理解)
  2. 如果正则使用了分组匹配就为多个否则无此参数。(此例的参数就分别为"nimojs", "@", "126.com"。推荐修改正则为/nimo/查看控制台中返回的arguments值)
  3. 匹配字符串的对应索引位置(此例为0)
  4. 原始字符串(此例为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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants