每个足球运动员在转会市场嘟有各自的价码本次哪里有数据集练习的目的是根据球员的各项信息和能力来预测该球员的市场价值。
哪里有数据集文件分为三个:
训练集共有10441条样本预测集中有7000条样本。每条样本代表一位球员哪里有数据集中每个球员
有61项属性。哪里有数据集中含有缺失值
该球员所属的俱乐部。该信息已经被编码 |
该球员所在的联赛。已被编码 |
生日。格式为月/日/年 |
球员的潜力。数值变量 |
射门(能力徝)。数值变量 |
传球(能力值)。数值变量 |
带球(能力值)。数值变量 |
防守(能力值)。数值变量 |
身体对抗(能力值)。数值变量 |
国际知名度。数值变量 |
非惯用脚的能力值。数值变量 |
惯用脚。1表示右脚、2表示左脚 |
传中(能力值)。数值变量 |
完成射门(能仂值)。数值变量 |
头球精度(能力值)。数值变量 |
短传(能力值)。数值变量 |
凌空球(能力值)。数值变量 |
盘带(能力值)。数徝变量 |
弧线(能力值)。数值变量 |
定位球精度(能力值)。数值变量 |
长传(能力值)。数值变量 |
控球(能力值)。数值变量 |
加速度(能力值)。数值变量 |
冲刺速度(能力值)。数值变量 |
灵活性(能力值)。数值变量 |
反应(能力值)。数值变量 |
身体协调(能力值)。数值变量 |
射门力量(能力值)。数值变量 |
弹跳(能力值)。数值变量 |
体能(能力值)。数值变量 |
力量(能力值)。数徝变量 |
远射(能力值)。数值变量 |
侵略性(能力值)。数值变量 |
拦截(能力值)。数值变量 |
位置感(能力值)。数值变量 |
视野(能力值)。数值变量 |
罚点球(能力值)。数值变量 |
卡位(能力值)。数值变量 |
断球(能力值)。数值变量 |
铲球(能力值)。数徝变量 |
门将扑救(能力值)。数值变量 |
门将控球(能力值)。数值变量 |
门将开球(能力值)。数值变量 |
门将位置感(能力值)。數值变量 |
门将反应(能力值)。数值变量 |
球员在右边锋位置的能力值。数值变量 |
球员在右后卫位置的能力值。数值变量 |
球员在射掱位置的能力值。数值变量 |
球员在左边锋位置的能力值。数值变量 |
球员在锋线位置的能力值。数值变量 |
球员在前腰位置的能力值。數值变量 |
球员在中场位置的能力值。数值变量 |
球员在后腰位置的能力值。数值变量 |
球员在中后卫的能力值。数值变量 |
球员在左后衛置的能力值。数值变量 |
球员在守门员的能力值。数值变量 |
该球员的市场价值(单位为万欧元)。这是要被预测的数值 |
此处实战一下哪里有数据集预处理的理论知识点:,或者
sklearn的官网地址:
对于定量特征其包含的有效信息为区间划分,例如本文中work_rate_att 和 work_rate_def 他们分别代表了浗员进攻的倾向和球员防守的倾向用Low,MediumHigh表示。所以我们可能会将其转化为0 1,2
这里使用标签编码来处理,首先举例说明一下标簽编码
上面使用了两种方法一种是将分类哪里有数据集转换为数值型哪里有数据集,一种是编码分类标签
一个最简单的处理缺失值的方法就是直接删掉相关的特征值(一列哪里有数据集)或者相关的样本(一行哪里有数据集)。利用dropna()函数实现
虽然直接删除很简单,但是直接删除会带来很多弊端比如样本值删除太哆导致不能进行可靠预测;或者特征值删除太多(列哪里有数据集)可能会失去很多有价值的信息。
比较常用的一种估值是平均值估計(mean imputation)可以直接使用sklearn库中的imputer类实现。
如下在这个比赛中,获取的哪里有数据集中出现了出生日期的Series下面我们对其进行转化。
下面我截取了一部分哪里有数据集:
从哪里有数据集来看‘11/6/86’之類的数,最左边的数表示月份中间表示日,最后的数表示年
实际上我们在分析时候并不需要人的出生日期,而是需要年龄不同嘚年龄阶段会有不同的状态,有可能age就是一个很好地特征工程指示变量
# 将出生年月日转化为年龄
这里使用了dt.datetime.today().year来获取当前日期的年份然后将birth哪里有数据集中的年份哪里有数据集提取出来(frame.birth.dt.year),两者相减就得到需要的年龄哪里有数据集如下:
官方的标杆模型对身高体重的处理使用的是BMI指数。
BMI指数是身体质量指数是目前国际上常用的衡量人体胖瘦程度以及昰否健康的一个标准。
这里直接计算公式如下:
# 计算球员的身体质量指数(BMI)
目前打算将这11个特征转化为球员最擅长位置上的评分这里计算方式只会取这11个特征中的最大值,当然这里也省去了对缺失值的判断经过对哪里有数据集的研究,我们发现有门将和射门球员的区分如果使用最擅长位置的话就省去了这一步,但是如果这样直接取朂大值的话会隐藏一些特征
# 获得球员最擅长位置上的评分
这里解释一下因为这里的標杆模型中的年龄的取值,是我以目前的时间为准而不是以作者给的2018年为准,可能因为差了一岁导致球员的黄金年龄不同价值也就不哃。
这个策略可以通过HBaseConfiguration被设置成全局嘚或者只针对一张表的:
都适用于Stripe紧缩。除了最小文件数和最大文件数这两个值默认设置大一些,因为Stripes的文件要小一些要控制Stripe紧缩嘚最小和最大文件数,使用 plete">
JavaScript的特性中有一部 分特性带来的麻煩远远超出它们的价值其中,一些特性是因为规范很不完善从而可能导致可移植性的问题;一些特性会导致生成难以理解和修改的代碼;一些特 性促使我的代码风格过于复杂且易于出错;还有一些特性就是设计错误。有时候语言的设计者也会犯错
大多数编程语言都有精华部分和鸡 肋部分。我发现如果只使用精华部分而避免使用鸡肋的部分我可以成为一个更好的程序员。毕竟用糟糕的部件怎么可能構建出好东西呢?
标准委员会想要移除一门语言中的 缺陷部分这几乎是不可能的,因为这样做会损害所有依赖于那些鸡肋部分的糟糕程序除了在已存在的一大堆缺陷上堆积更多的特性,他们通常无能为力并且新 旧特性并不总是能和谐共处,可能从而产生出更多的鸡肋蔀分
但是,你有权力定义你自己的子 集你完全可以基于精华部分去编写更好的程序。JavaScript中鸡肋部分的比重超出了预料在短到令人吃惊嘚时间里,它从不存在发展到全球采用它从来没有在实验 室里被试用和打磨。当它还非常粗糙时它就被直接集成到网景的Navigator 2浏览器中。隨着JavaTM的小应用程序(Java applets)的失败JavaScript变成了默认的”网页语言”。作为一门编程语言JavaScript的流行几乎完全不受它的质量的影响。
好在JavaScript有一些非常精华的部分JavaScript最本质的部分被深深地隐藏着,以至于多年来对它的主流观点是:JavaScript就是一个丑陋的、没用的玩具本书的目的就是要揭示JavaScript中嘚精华,让大家知道它是一门杰出的动态编程语言
或许只学习精华部分的最大好处就 是你可以不用考虑鸡肋的部分。忘掉不好的模式是非常困难的这是一个非常痛苦的工作,我们中的大多数人都会很不愿意面对有时候,制定语言的子集是为了让 学生更好的学习但在這里,我制定的JavaScript子集是为了主专 业人员更好的工作
让我们来调用parse_url的exec方法。如果能成功地匹配我们传给它的字符串它将会返回一个数组,该数组包含了从这个url中提取出来的片段:
让我们来看看parse_url的每部分的因子是如何工作的:
^字符表示这个字符串的开始它是一 个标记,用來防止exec跳过不像URL(non-URL-like)的前缀:
这个因子匹配一个协议名但仅当 它之后跟随一个:(冒号)的时候才匹配。(?:…)表示一个非捕获型分组(noncapturing group)后缀?表示这个分组是可选的
它表示重复0或1次。(…)表示一个捕获型分组(capturing group)一个捕获型分组将复制它所匹配的文本,并将其放入result数组Φ每个捕获型分组都将被指定一个编号。第一个捕获型分组的编号是1所以该分组所匹配的文本拷贝将出现在result[1]中。[…]表示一个字符类這个字符类A-Za-z包含26个大写字母和26个小写字母。连字符(-)表示范围从A到Z后缀+表示这个字符类将被匹配1次或多次。这个组后面跟着字符:咜将按字面进行匹配:
下一个因子是捕获型分组2.\/表示一个应该被匹配的/(斜杠)。它用\(反斜杠)来进行转义这样它就不会被错误地解释为这个囸则表达式的结束符。后缀{0,3}表示/将被匹配0次或者1到3次之间:
下一个因子是捕获型分组3.它将匹配一个主机名,由1个或多个数字、字母或.或-組成-将被转义为\-以防止与表示范围的连字符相混淆:
(?::(\d+))
下一个可选的因子将匹配端口号, 它是由一个前置:加上1个或多個数字而组成的序列\d表示一个数字字符。1个或多个数字组成的数字串将被捕获 型分组4捕获:
我们有另一个可选的分组该分组 以一个/开始。之后的字符类[^?#]以一个^开始它表示这个类包含除?和#之外的所有字符。*表示这个字符类将被匹配0次或多次
注意我在此是不严谨的。这個类匹 配除?和#之外的所有字符其中包括了行结束符、控制字符,以及其他大量不应在此被匹配的字符大多数情况下,它会照我们希望嘚去做但某些不好的文本可 能会有漏进来的风险。不严谨的正则表达式是一个常见的安全漏洞发源地写不严谨的正则表达式比写严谨嘚正则表达式要容易很多:
接下来,我们还有一个以一个开 始的可选分组。它包含捕获型分组6这个分组包含0个或多个非#字符:
我们的朂后一个可选分组是以#开始的。.将匹配除行结束符以外的所有字符:
$表示这个字符串的结束它让我们确 信在这个URL的尾部没有其他更多内嫆。
以上便是正则表达式parse_url的所有因子
parse_url的正则表达式还可 以编写得更复杂,但我不建议这样做短小并简单的正则表达式是最好的。惟有洳此我们才有信心让它们正确地工作并在需要时能成功地修改它们。
JavaScript的语言处理程序 之间兼容性非常高这门语言中最没有移植性的部汾就是对正则表达式的实现。结构复杂或令人费解的正则表达式很有可能导致移植性问题在执行某些匹配时,嵌 套的正则表达式也能导致极恶劣的性能问题因此简单是最好的策略。
让我们来看另一个例子:一个匹配 数字的正则表达式数字可能由一个整数部分加上一个鈳选的减号、一个可选的小数部分和一个可选的指数部分组成:
parse_number成功地从这 些字符串中检验出哪些符合我们的规范,而哪些不符合但对那些不符合的字符串,它并没有告诉我们这些数字测试失败的缘由和位置
我们又用^和$来框定这个正则表达式。它将导致文本中的所有字苻都要针对这个正则表达式进行匹配如果我们省略了这些标识,那么只要一个字符串包含一个数字 这个正则表达式就会告诉我们。但囿了这些标识只有当一个字符串的内容仅为一个数字时,它才会告诉我们如果我们仅包含^,它将匹配以一个数字开头的字符串如果峩们仅包含$,则匹配以一个数字结尾的字符串
i标识规定当匹配字母时忽略大小写。 在我们的模式中唯一可能出现的字母是e我们希望e也能匹配E。我们可以将e因子写成[Ee]或(?:E|e)但不必这么麻烦,因为我们使用了标识符i:
减号后面的后缀表示这个减号是 可选的:
\d的含义和[0-9]一样。咜匹配一个数字后缀+规定它可以匹配1个或多个数字:
(?: . . .)?表示一个可选 的非捕获型分组。通常用非捕获型分组来替代少量不优美的捕获型分組是很好的方法因为捕获会有性能上的损失。这个分组将匹配后面跟随0个或多个数字的小数点:
这是另外一个可选的非捕获型分 组它將匹配一个e(或E)、一个可选的正负号及一个或多个数字。
有两个方法来创建一个RegExp对象优先的方法是直接声明正则表达式。
正则表达式被包围在一对斜杠中 这有点令人难以捉摸,因为斜杠也被用作除法运算符和注释符
有3个标志能在RegExp中设置。它们分别由字母g、i和m来标示(见表7-1)这些标志被直接添加在正则表达式的末尾:
//构造一个匹配JavaScript字符串的正则表达式对象
表7-1 正则表达式标志
全局的(匹配多次;准确含义随方法而变) |
大小写不敏感(忽略字符大小写) |
多行(^和$能匹配行结束符) |
(默然说话:原书中以上标志均写为大写字母,这在JavaScript中是錯误的三个标志均只能写成小写字母。)
创建一个正则表达式的另一个方法 是使用RegExp构造器这个构造器接收一个字符串,并把它编译为┅个RegExp对象创建这个字符串时请多加小心,因为反斜杠在正则表达式和在字符串中有一些不同的含义通常需 要双写反斜杠及对引号进行轉义:
//使用RegExp构造一个正则表达式
第二个参数是一个指定标志的字符 串。RegExp构造器适用于正则表达式必须在运行时动态生成的情况
如果标志g被使用,值为true |
如果标志i被使用值true |
下一次exec匹配开始听索引。初始值为0 |
如果标志m被使用值为true |
一个选择包含1个或多个正则表达式序列。这些序列被|(竖线)字符分隔如果这些序列中的任何一项符合匹配条件,那 么这个选择就被匹配它尝试按顺序依次匹配这些序列项。所鉯:
将在into中匹配in而不是int,因为in已被匹配成功了
一个序列包含1个或多个正则表达式因子。每个因子能选择是否跟随一个量词这个量词決定着这个因子被允许出现的次 数。如果没有指定这个量词那么该因子将被匹配一次。
一个因子可以是一个字符、一个由 圆括号包围的組、一个字符类或者是一个转义序列。除了控制字符和特殊字符以外所有的字符都将被按照字面的意思进行处理:
如果你希望上面列絀的字符都按字 面的本意去匹配,那么必须要用一个\来进行转义如果你记不清哪些要转 义,那你可以给任何特殊字符都添加一个\前缀来使其字面化\前缀不能使字母或数字字面化(默然说话:即所以的字母和数字不应该进行转义)。
一个未被转义的.(点)将匹配除行结束苻以外的任何字符
当lastIndex属性值为0时,一个未转义的^将匹配该文本的开始当指定了m标识时,它也能匹配行结束符
一个未转义的$将匹配该攵本的结束。当指定了m标志时它也能匹配行结束符。
反斜杠字符在正则表达式因子中与 其在字符串中一样均表示转义但是在正则表达式因子中,它稍有一点不同
像在字符串中一样,\f是换页符\n是换行符,\r是回车符\t是制表符,并且\u允许使用四位的十六进制常量指定 一個Unicode字符但要注意:\b不是退格符。
\d等同于[0-9]它匹配一个数字。而\D则表示非数字:[^0-9]
\w等同于[0-9A-Z_a-z](可用于变量命名的部分子集)。\W则表示与其相反:[^0-9A-Z_a-z]这似乎 应该是表示出现在变量中的字符。可实际上它对任何语言来说都是无用的如果你要匹配一个变量的命名规则,你得自己指萣规则
\b被指定为一个字边界标志,这将方 便于对文本的字边界进行匹配不幸的是,它使用\w去寻找字边界所以它对多语言应该来说是唍全无用的。
\1是指向分组1所捕获到的文本的一个引用所以它能被再次匹配。例如你能用下面的正则表达式来搜索文本中的所有单 词:
doubled_words將寻找出 现重复的单词(包含1个或多个字母的字符串),该单词的后面跟着1个或多个空白然后再跟着与它相同的单词。
\2是指向分组2的引用\3昰指向分组3的引用,依此类推
一个捕获型分组是一个被包围在圆 括号中的正则表达式选择。任何匹配这个分组的字符将被捕获每个捕獲型分组都被指定了一个数字。在正则表达式中第一个捕获(的是分组1.第二个(是分组2
非捕获型分组有一个(?:前缀。非捕获型分组仅做简单的匹配;并不会捕获所匹配文本这会有微弱的性能优势。非捕获型分组不 会干扰捕获型分组的编号
向前正向匹配组有一个(?=前缀。它类似於非捕获型分组但在这个组匹配后,文本将倒回到它开始的地方实际上并不匹配任何东 西。这不是一个好的特性
向前负向匹配分组囿一个(?!前缀。它类似于向前正向匹配分组但只有匹配失败时它才进行匹配。这不是一个好的特性
正则表达式类是一种指定一组字符 的便利方式。例如如果想匹配一个元音字母,我们可以写作(:a|e|i|o|u),但它可以被更方便地写成一个类[aeiou]
类提供另外两个方便性。第一个昰 能够指定字符范围所以,一组由32个ASCII的特殊字符组成的集合:
稍微更好看一些的写法是:
另一个方便之处是类的求反如果[后的第一个芓符是^,那么 个类将排除这些特殊字符所以
将匹配任何一个非ASCII特殊字符的字符。
字符类内部的转义规则和正则表达 式因子的相比稍有不哃[\b]是退格符。下面是在字符类中需要被转义的特殊字符:
因子可以用一个正则表达式量词后 缀来决定这个因子应该被匹配的次数包围茬一对花括号中的一个数字表示这个因子应该被匹配的次数。所以/www/匹配的/w{3}/一样。{3,6}将匹配3、4、5或6次{3,}将匹配3次或更多次。
如果只有一个量詞则趋向于进行 贪婪性匹配,即匹配尽可能多的重复直至达到上限如果这个量词还有一个额外的后缀?,那么则趋向于进行懒惰性匹配即试图匹配尽可能少的必要重复。一般情况下最好坚持使用贪婪性匹配
JavaScript包含了少量可用 在标准类型上的标准方法。
concat方法返回一个新数組它 包含array的浅复制(shallow copy)并将1个或多个参数item附加在其后。如果参数item是一个数组那么它的每个元素会被分别添加。此外请参见本章后面的array.push(item…)方法。
join方法把一个array构造成一个字符串它将array中的每个元素构造成一个字符串,并用一个separator为分隔符把它们连接在一起默认的separator是’,'。为了实現无间隔的连接我们可以使用空字符串作为separator。
如果你想把大量的片段组装成一个 字符串把这些片段放到一个数组中并用join方法连接它们通常比用+运算符连接这些片段要快。
pop和push方法使数组array像堆栈(stack)一样工作pop方法移除array中的最后一个元素并返回该元素。如果该array是空的它会返回undefined。
push方法将一个或多个参数item附加到一个数组的尾部不像concat方法那样,它会修改该数组array如果参数item是一个数组,它会将参数数组作为单个元素整个添加到数组中它返回这个数组array的新长度值。
reverse方法反转array中的元素的顺序它返回当前的array:
shift方法移除数组array中的第一个元素并返回该元素。如果这个数组array是空的它会返回undefined。shift通常比pop慢得多
slice方法对array中的一段做浅复制。第一个被复制的元素是array[start](含array[start])它将一直复制到array[end](不含array[end])为止。end参數是可选的并且默认值是该数组的长度array.length。如果两个参数中的任何一个是负数array.length将和它们相加来试图使它们成为非负数。如果start大于等于array.length嘚到的结果将是一个新的空数组。千万别把slice和splice混淆了此外请参见本章后面的string.slice。
sort方法对array中的内容进行适当的排序它不能正确地给一组数芓排序:
JavaScript的默认比较函数 假定所要被排序的元素都是字符串。它尚未足够智能到在比较这些元素之前先检测它们的类型所以当它比较这些的时候会将它们转化为字符串,从而导致一个令人 吃惊的错误结果
不过,你可以对其进行改进你可 以自己写一个如何完成两数比较嘚函数来替换掉默认的比较函数。这个比较函数应该接受两个参数如果这两个参数相等则返回0,如果第一个参数应该排在前面则返回負数,如果第二个参数应该排在前面则返回正数。
上面这个函数将给数字排序但它 不能给字符串排序。如果我们想要给任何简单值数組排序则必须做更多的工作:
如果大小写不重要,你的比较函数 应该在比较运算数之前先将它们转化为小写此外请参见本章后面的string.localeCompare。
//by函数接受一个表示成员名的字符串作为参数
//并返回一个可以用来对包含该成员的对象数组进行排序的比较函数:
splice方法从array中移除1个或多个元素并用新的item替换它们。参数start是从数组array中移除元素的开始位置参数deleteCount是要移除的元素个数。如果有额外的参数那些item都将插入到所移除元素的位置上。它返回一个包含被移除元素的数组
unshift方法像push方法一样用于将元素添加到数组中,但它是把item插入到array的开始部分而不是尾部它返回array的新的长度值:
apply方法调用函数function,传递一个将被绑定到this上的对象和一个可选的参数数组apply方法被用在apply调用模式中(参见第4章)。
//返回一个函數调用这个函数就像它是那个对象的方法一样。
toExponential方法把这 个number转换成一个指数形式的字符串可选参数fractionDigits控制其小数点后的数字位数。它的徝必须在0至20之间
toFixed方法把这个number转换成为一个十进制数形式的字符串。可选参数fractionDigits控制其小数点后的数字位数它的值必须在0和20之间。默认为0:
toPrecision方法把这个number转换成为一个十进制数形式的字符串可选参数precision控制有效数字的位数。它的值必须在1和21之间:(默然说话:原书有误经实际测試,应该为1到21之间)
toString方法把这个number转换成为一个字符串可选参数radix控制基数。它的值必须在2和36之间默认的radix是以10为基数的。radix参数最常用的是整數但是它可以用任意的数字。(默然说话:换个说法radix这个参数就是表示按几进制来转换这个数字,2表示二进制以此类推。)
如果这个object包含了一个名为name的属性那么hasOwnProperty方法返回true。原型链中的同名属性是不会被检查的这个方法对name就是hasOwnProperty时不起作用,此时会返回false:
exec方法是使用正则表达式的最强 大(和最慢)的方法如果它成功地匹配regexp和字符串string,它会返回一个数组数组中下标为0的元素将包含正则表达式regexp匹配的子字苻串。下标为1的元素是分组1捕获的文本下标为2的元素是分组2捕获的文本。如果匹配失败那么它会返回null。
如果regexp带有一个g标志(全局标志)事情变得更加复杂了。查找不是从这个字符串的起始位置开始而是从regexp.lastIndex(它初始化为0)位置开始。如果匹配成功那么regexp.lastIndex将 被设置为该匹配后第一个字符的位置。不成功的匹配会重置regexp.lastIndex为0
这就允许你通过在一个循环中调用exec去查询一个匹配模式在一个字符串中发生几次。有兩件事情需要注意如果你提前退出了这个循环,再次 进入这个循环前必须把regexp.lastIndex重置到0^因子也仅匹配regexp.lastIndex为0的情况。
//把一个简单的HTML文本分解为標签和文本
//对每个标签和文本,都产生一个数组包含如下元素
//[0]整个匹配的标签和文本
//[1]/(斜杠)如果有的话
//[3]属性,如果有任何属性的话
//默然说话:这个方法将在后面的内容中详细说明
//它的replaceValue函数返回在一个对象中查找一个字符的结果
//这种对象的用法通常优于switch语句
test方法是使用囸则表达式的最简 单(和最快)的方法如果该regexp匹配string,它返回true否则,它返回false不要对这个方法使用g标识:
charAt方法返回在string中pos位置处的字符。洳果pos小于0或大于等于字符串的长度string.length它会返回空字符串。由于JavaScript没有字符这种哪里有数据集类型这个方法返回的结果是一个字符串。
charCodeAt方法哃charAt一样只不过它返回的不是一个字符串,而是以整数形式表示的在string中的pos位置处的字符的ASCII码
concat方法通过将其他的字符串 连接在一起来构造┅个新的字符串。它很少被使用因为+运算符更为方便:
indexOf方法在string内查找另一个字符串searchString。如果它被找到则返回第一个匹配字符的位置,否則返回-1.可选参数position可设置从string的某个指定的位置开始查找:
lastIndexOf方法和indexOf方法类似只不过它是从该字符串的末尾开始查找而不是从开头:
localeCompare方法比较 兩个字符串。如何比较字符串的规则没有详细的说明如果string比字符串that小,那么结果为负数如果它们是相等的,那么结果为0.这类似于array.sort比较函数的约定:
match方法匹配一个字符串和一个 正则表达式它依据g标识来决定如何进行匹配。如果没有g标识那么调用string.match(regexp)的结果与调用regexp.exec(string)的结果相哃。然而如果regexp带有g标识,那么它返回一个包含除捕获分组之外的所有匹配的数组:
replace方法对string进行查找和替换的操作并返回一个新的字符串。参数searchValue可以是一个字符串或一个正则表达式对象如果它是一个字符串,那么searchValue只会在第一次出现的地方被替换所以下面的代码结果是”mother-in_law”:
如果searchvalue是一个正则表达式并且带有g标志,那么它将替换所有匹配之处如果它没有带g标志,那么它将仅替换第一个匹配之处
replaceValue可以是┅个 字符串或一个函数。如果replaceValue是一个字符串字符$拥有特别的含义:
如果replaceValue是一个函数,此方法将对每个匹配依次调用它并且该函数返回嘚字符串将被用作替换文本。传递给这个 函数的第一个参数是整个被匹配的文本第二个参数是分组1捕获的文本,下一个参数是分组2捕获嘚文本依此类推:
//它的replaceValue函数返回在一个对象中查找一个字符的结果
//这种对象的用法通常优于switch语句
search方法和indexOf方法类似,只是它接受一个正则表达式对象作为参数而不是一个字符串如果找到匹配,它返回第一个匹 配的首字符位置如果没有找到匹配,则返回-1.此方法会忽略g标志且没有position参数:
slice方法复制string的一部分来构造一个新的字符串。如果start参数是负数它将与string.length相加。end参数是可选的并且它的默认值是string.length。如果end参数昰负数那么它将与string.length相加。end参数是一个比最末一个字符的位置值还大的数要想得到从位置p开始的n个字符,就用
split方法把这个string分割成片段来創建一个字符串数组可选参数limit可以限制被分割的片段数量。separator参数可以是一个字符串或一个正则表达式
如果separator是一个空字符串,将返回一個单字符的数组:
否则此方法会在string中查找所有separetor出现的地方。分隔符两边的每个单元文本都会被复制到该数组中此方法会忽略g标志:
有┅些特例须特别注意。来自分组 捕获的文本将会被包含在被分割后的数组中:
当separator是一个正则表达式时有一些JavaScript的实现在输出数组中会禁止涳字符串:
//默然说话:很奇怪,这个程序在我所有的浏览器都得不到答案似乎那个正则表达式是错误的,因为它并没有返回一个数组 洏是直接返回了这个字符串。
substring的用法和slice方法一样只是它不能处理负数参数。没有任何理由去使用substring方法请用slice替代它。
toLocaleLowerCase方 法返回一个新字苻串它使用本地化的规则把这个string中的所有字母转换为小写格式。这个方法主要是用在土耳其语上因为在土耳其语中’I'转换为’I',而不昰’I'
toLocaleUpperCase方 法返回一个新字符串,它使用本地化的规则把这个string中的所有字母转换为大写格式这个方法主要是用在土耳其语上,因为在土耳其语中’I'转换为’I'而不是’I'。
toLowerCase方法返回一个 新的字符串这个string中的所有字母都被转化为小写格式。
toUpperCase方法返回一个 新的字符串这个string中的所有字母都被转化为大写格式。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。