在线客服:
yabo88登陆 yabo88登陆
全国服务热线:010-67319468
您的位置:首页 > 新闻中心 >

JavaScript正则表达式应用程序--- replace()

浏览 125次 来源:【jake推荐】 作者:-=Jake=-    时间:2021-01-14 08:04:54
[摘要] 这个替换模式可以是字符串或者RegExp(正则表达式),替换值可以是一个字符串或者一个函数。在进行全局的搜索替换时,第一个参数要么时包含g标志的正则表达式,要么时包含g标志的字符串。)另外要注意的是,如果第一个参数是正则表达式,并且其为全局匹配模式,那么这个方法将被多次调用,每次匹配都会被调用。

The

replace()方法使用替换值(replacement)替换匹配模式(pattern)的原始字符串中的某些或所有匹配项,并返回替换后的字符串。替换模式可以是字符串或RegExp(正则表达式),替换值可以是字符串或函数。

语法

str.replace(regexp|substr, newSubStr|function[, flags])

参数标签说明

g

全局匹配

i

忽略大小写

m

多行模式

y

粘性

返回值

由替换模式部分或完全匹配的新字符串。

说明

此方法不会更改字符串本身,而只会返回替换后的字符串。

执行全局搜索和替换时,第一个参数要么是包含g标志的正则表达式,要么是包含g标志的字符串。

使用字符串作为参数

可以将替换字符串插入以下特殊变量名称:

变量名表示的值

$$

插入“ $”。

$&

插入匹配的子字符串。

$`

将内容插入当前匹配的子字符串的左侧。

\ $'

将内容插入当前匹配的子字符串的右侧。

\ $ n或\ $ nn

如果第一个参数是RegExp对象javascript 正则表达式,并且n或nn是十进制数字,请插入与第n个括号匹配的字符串。

将函数指定为参数

您可以将函数指定为第二个参数。在这种情况下,将在执行匹配时执行该功能。该函数的返回值用作替换字符串。 (注意:上面提到的特殊替换参数不能在这里使用。)另外请注意,如果第一个参数是一个正则表达式,并且它是一个全局匹配模式javascript 正则表达式亚博app ,则将多次调用此方法,每次都将调用“所有匹配项”。

以下是该函数的参数:

变量名表示的值

匹配

匹配的子字符串。 (对应于上面的$&。)

p1,p2,...

如果replace()方法的第一个参数是RegExp对象,则它表示由第n个括号匹配的字符串。 (对应于上面的$ 1,$ 2等)

偏移量

匹配的子字符串在原始字符串中的偏移量。 (例如,如果原始字符串为“ abcd”,而匹配的子字符串为“ bc”,则此参数将为1)

字符串

要匹配的原始字符串。 (确切的参数数量取决于replace()的第一个参数是否为正则表达式对象,以及在正则表达式中指定了多少个括号子串。)

以下示例将使newString成为'abc-12345-#$ *%':

function replacer(match, p1, p2, p3, offset, string) {
    // p1 is nondigits, p2 digits, and p3 non-alphanumerics
    return [p1, p2, p3].join(' - ');
}
var newString = 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);

该示例在replace()中使用全局和忽略选项

在下面的示例中,正则表达式包含全局替换(g)和忽略大小写(i)的选项,这使replace方法将所有出现的“ apples”替换为“ oranges”。

var re = /apples/gi;
var str = "Apples are round, and apples are juicy.";
var newstr = str.replace(re, "oranges");
print(newstr);

与上面的示例相比,以下示例中replace方法的第一个参数使用字符串而不是正则表达式,并且g和i选项只能放在三个参数中。

var str = "Apples are round, and apples are juicy.";
var newstr = str.replace("apples", "oranges", "gi");
print(newstr);

两个示例均显示“橙色为圆形,而橙色为多汁。”

在replace()方法中使用常规直接数量

在下面的示例中,replace()方法的第一个参数使用正则表达式文字,并使用i(忽略大小写)选项

var str = "Twas the night before Xmas...";
var newstr = str.replace(/xmas/i, "Christmas");
print(newstr);  // Twas the night before Christmas...

打印出“圣诞节前一天晚上...”

交换两个单词成串

下面的示例演示如何交换字符串中两个单词的位置。该脚本使用$ 1和$ 2代替替换文本。

var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1");
print(newstr);

打印出“史密斯,约翰”。

使用函数来修改匹配的字符。

在此示例中,所有出现的大写字母都转换为小写,并且在匹配位置之前添加了连字符。重要的是,在返回替换的字符串之前,需要在匹配元素之前添加它。

在返回之前,替换功能将匹配的段作为参数,并将其与连字符连接起来作为新段。

function styleHyphenFormat(propertyName) {
    function upperToHyphenLower(match) {
        return '-' + match.toLowerCase();
    }
    return propertyName.replace(/[A-Z]/g, upperToHyphenLower);
}

此代码styleHyphenFormat('borderTop')将返回'border-top'。

由于我们要在最终替换中进一步转换匹配结果,因此必须使用一个函数。这迫使我们在使用toLowerCase()方法之前进行评估。如果我们尝试不使用函数进行匹配,则无法使用toLowerCase()方法。

var newString = propertyName.replace(/[A-Z]/, '-' + '$&'.toLowerCase());  // won't work

这是因为在将字符用作模式之前,'$&'。toLowerCase()最初用作字符串(导致相同的'$&')。

将华氏温度转换为等效的摄氏温度

下面的示例演示如何将华氏温度转换为等效的摄氏温度。华氏温度由数字加“ F”表示亚博买球 ,此函数将返回数字加“ C”表示摄氏温度。例如,如果输入为212F,则此函数将返回100C。如果数字为0F,则此方法将返回“ -17.77777777777778C”。

正则表达式测试检查是否有任何数字以F结尾。华氏温度通过第二个参数p1进入函数。此函数基于以字符串形式传递给f2c函数的华氏温度,以摄氏度为单位设置温度。然后f2c()返回摄氏温度。此功能类似于Perl的s /// e标志。

function f2c(x) {
    function convert(match, p1, offset, s) {
        return ((p1-32) * 5/9) + "C";
    }
    var test = /(\d+(?:\.\d*)?)F/g;
    return x.replace(test, convert);
}

将数字转换为数千

千分之一数字表示将三个数字转换为一个点,例如1234567890转换为1,234,567,890。

var str = "1234567890";
str.replace(/\d{1,3}(?=(\d{3})+$)/g, function(match) {
    return match + ',';
});

详细信息:在正则表达式/ \ d {1,3}(?=(\ d {3})+ $)/ g中,\ d表示匹配数字,{1,3}表示匹配1至3秒BG真人 , \ d {1,3}表示匹配连续的1到3个数字,\ d {3}表示匹配三个连续的数字,(?=)表示反向匹配yb官网 ,即从后到前匹配,(?=(\ d {3 }} + $)表示从后到前的三个数字至少匹配一次,并且在前面必须有1到3个数字,即第一个\ d {1,3},最后一个参数g表示全局匹配,并且全部匹配。

在下面的回调函数中添加更多参数。

var str = "1234567890";
str.replace(/\d{1,3}(?=(\d{3})+$)/g, function(match, p1, offset, string) {
    //return s+',';
    console.log(match, p1, offset, string);
});

match是与\ d {1,3}匹配的字符串,p1是每次与(\ d {3})匹配的字符串,offset是match的起始位置(从0开始),string始终为Is原始字符串。

输出结果如下:

1 890 0 1234567890
234 890 1 1234567890
567 890 4 1234567890

参考

上面的大多数文章都是从中复制的,我也翻译了其中的一些文章。我希望纠正任何错误和误解!

老王
本文标签:正则表达式,replace,字符串函数

推荐阅读

最新评论