- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章String字符串匹配javascript 正则表达式由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
在JavaScript代码中使用正则表达式进行模式匹配经常会用到String对象和RegExp对象的一些方法,例如replace、match、search等方法,下面所述是对相关方法使用的总结,需要的朋友参考下.
String对象中支持正则表达式有4种方法,分别是:search、replace、match、split 。
str.search(regexp) 。
定义:search()方法将在字符串str中检索与表达式regexp相匹配的字串,并且返回第一个匹配字串的第一个字符的位置。如果没有找到任何匹配的字串,则返回-1.
例如:
1
2
3
|
var
str =
"Javascript"
;
str.search(/script/);
// 返回 script 中s的位置为 4
str.search(/j/i);
// 设置正则表达是标识i:忽略大小写,则匹配到J,返回位置0
|
但是,search()方法不支持全局搜索,因为会忽略正则表达式参数的标识g,并且也忽略了regexp的lastIndex属性,总是从字符串的开始位置进行检索,所以它会总是返回str的第一个匹配的位置.
例如:
1
2
3
|
var
str =
"javascript is cool"
;
str.search(/s/g);
// 返回 javascript 中的s位置4,不会继续检索s
str.replace(regexp, replacement)
|
定义:replace()方法是执行查找并替换的操作。它将正则表达式regexp匹配到的字串,然后用replacement的字符串替换掉字串,如果有全局标识g,则替换全部匹配的字串,否则只替换第一个匹配字串.
replace方法应该是比较常用的一个方法,在字符串替换操作中非常有用的。例如:
1、简单替换 。
1
2
|
var
str =
"javascript"
;
str.replace(/javascript/,
'JavaScript'
);
// 将字符串javascript替换为JavaScript
|
2、全局替换 。
1
2
3
|
// 使用全局表示g进行全局替换
var
str =
"javascript"
;
str.replace(/a/g,
'b'
);
// 将所有的字母a替换为字母b,返回 jbvbscript
|
3、使用replacement中的特殊字符替换,在replacement中$字符有特殊的意义,具体说明如下表格:
来看下例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//1、用子表达式替换:$1、$2等
var
str =
"javascript"
;
str.replace(/(java)(script)/,
'$2$1'
);
// 表达式中()就是一个子表达式,$1对应是第一个表达式的内容,即java,$2为script,所以替换结果为:scriptjava
//2、$& 为正值表达式匹配的字串
var
str =
"javascript"
;
str.replace(/java/,
'$&-'
);
// 正则表达式通过直接量java来匹配,匹配结果为java,则 $&的值为java,然后用字符串$&-来替换匹配的字串,结果为java-script
// 3、 $` $' $$
var
str =
"javascript"
;
str.replace(/ava/,
"$`"
);
// $`为匹配子串ava的左侧文本,则为j,则替换后ava的结果为:jjscript
str.replace(/ava/,
"$'"
);
// $'为匹配子串ava的右侧文本,则为script,则替换ava的结果为:jscriptscript
str.replace(/ava/,
"$$"
);
// $$为直接量符号,即插入一个$符号,替换结果为:j$script
|
4、使用replacement作为函数替换 。
replace的参数replacement可以是函数而不是字符串,每个匹配都会调用该函数,它返回的字符串将作为替换的文本使用。该函数的第一个参数是整个匹配模式的字符串,接下来的参数是与模式中的子表达式匹配的字符串,可以有0个或多个参数。接下来的参数是一个整数,声明了匹配在str中出现的位置。最后的参数是str自身.
来看个例子:
1
2
3
4
5
6
7
8
9
10
11
|
// match 为匹配整个字符串,即:'abc12345#$*%'
// p1 为第一个子表达式,([^\d]*),匹配0个或多个非数字的字符,即:abc
// p2 为第二个子表达式,(\d*),匹配0个或多个的数字,即:12345
// p3 为第三个子表达式,([^\w]*),匹配0个或匹配任何非单词字符。等价于 '[^A-Za-z0-9_]',即 #$*%
// offset 为模式匹配出现的位置,从第一个字符已经匹配成功,则位置为0
// string为字符串本身,即 abc12345#$*%
function
replacer(match, p1, p2, p3, offset, string) {
return
[p1, p2, p3].join(
' - '
);
}
var
newString =
'abc12345#$*%'
.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);
// 替换结果为:abc - 12345 - #$*%
|
str.match(regexp) 。
定义:match()方法是最常用的String正则表达式方法。它唯一的参数就是一个正则表达式或者通过RegExp()构造函数来创建正则表达式,返回值是包含了匹配结果的数组.
match()方法中的regexp正则表达式一般又分为两种情况:有设置全局标志g和没有设置全局标志 。
1、有设置全局标志 。
如果设置了全局标志g,则返回的数组包含的就是出现在字符串的所有匹配结果,例如:
1
2
3
|
// 全局匹配
var
str =
"1 plus 2 equals 3"
;
str.match(/\d/g);
// 匹配字符串中出现的所有数字,并返回一个数组: [1,2,3]
|
2、没有设置全局标志 。
如果没有设置全局标志,则就不是全局性的检索,只是检索第一个匹配。这种情况下,match()方法匹配的结果也是返回一个数组,数组的第一个元素就是匹配的字符串,而余下的元素则是正则表达式中用括号括起来的子表达式。来看个例子:
1
2
3
4
5
6
|
// 非全局匹配
var
str =
"visit my blog at http://www.example.com"
;
str.match(/(\w+):\/\/([\w.]+)/);
// 返回结果:["http://www.example.com", "http", "www.example.com"]
// 正则表达式匹配的结果为:http://www.example.com
// 第一个子表达式 (\w+)匹配结果:http
// 第二个子表达式 ([\w.])匹配结果: www.example.com
|
str.split(delimiter, limit) 。
定义:split()方法可以把调用它的字符串分解为一个字串数组,使用的分隔符是它的参数.
参数:
delimiter:字符串或者正则表达式,从该参数指定的地方分割字符串.
limit:指定返回数组的最大长度,如果没有设置该参数,则整个字符串都会被分割.
例如:
1
2
3
4
5
6
7
8
9
10
11
12
|
//1、 只传一个参数,默认分割整个字符串
var
str =
"a,b,c,d,e"
;
str.split(
','
);
// 返回分割的字符串数组:["a", "b", "c", "d", "e"]
//2、传入两个参数
var
str =
"a,b,c,d,e"
;
str.split(
','
,3);
//指定限定长度,则返回对应的数组:["a", "b", "c"]
//3、使用正则表达式匹配,不包含分割字符串
var
str =
"aa44bb55cc66dd"
;
str.split(/\d+/);
//通过匹配数字进行分割字符串,但不包含分割的字符串,则返回的结果为:["aa","bb","cc","dd"];
//4、使用正则表达式匹配,包含分割字符串
var
str =
"aa44bb55cc66dd"
;
str.split(/(\d+)/);
//通过匹配数字进行分割字符串,且分割的字符串是包含在子表达式中,则返回的结果为:["aa", "44", "bb", "55", "cc", "66", "dd"]
|
关于正则表达式模式匹配的String方法的相关知识,小编就给大家介绍到这里.
最后此篇关于String字符串匹配javascript 正则表达式的文章就讲到这里了,如果你想了解更多关于String字符串匹配javascript 正则表达式的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有一个加号/减号按钮,希望用户不能选择超过 20 个但不知道如何让它工作。我尝试使用 min="1"max="5 属性,但它们不起作用。这是我的代码和一个 fiddle 链接。https://jsf
我正在尝试复制顶部底部图,如示例 here但它没有正确渲染(紫色系列有 +ve 和 -ve 值,绿色为负值)留下杂乱的人工制品。我也在努力创建一个玩具示例来复制这个问题,所以我希望尽管我缺乏数据,但有
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 已关闭 6 年前。 社区去年审查了是
这个问题在这里已经有了答案: Adding two positive integers gives negative answer.Why? (4 个答案) 关闭 5 年前。 我遇到了一个奇怪的问题
有谁知道如何将字符串值类型 -4,5 或 5,4 转换为 double -4.5 或 5.4? 最佳答案 只需使用 Double.parseDouble(Locale, String); 糟糕,我很困
我正在尝试根据 TextBlob 分类插入一个仅包含“正”或“负”字符串的新数据框列:对于我的 df 的第一行,结果是 ( pos , 0.75, 0.2499999999999997)我想要' 正
我对 VBA 非常陌生,无法理解如何在一个循环中完成 2 个任务。我非常感谢您的帮助。 我已经能够根据第 3 列中的数据更改第 2 列中的数值,但我不明白如何将负值的字体更改为红色。 表格的大小每月都
欢迎, 我正在使用 jquery 通过 POST 发送表单。 这就是我获得值(value)的方式。 var mytext = $("#textareaid").val(); var dataStrin
double d = 0; // random decimal value with it's integral part within the range of Int32 and always p
我有这个字符串: var a='abc123#xyz123'; 我想构建 2 个正则表达式替换函数: 1) 用 '*' 替换所有确实有 future '#'的字符(不包括'#') 所以结果应该是这样的
我正在使用 DialogFragment。当用户从 Gmail 平板电脑应用程序的屏幕与下面示例图片中的编辑文本进行交互时,我希望正面和负面按钮保持在键盘上方。 在我的尝试中不起作用,这是我的 Dia
从组装艺术一书中,我复制了这句话: In the two’s complement system, the H.O. bit of a number is a sign bit. If the H.O
是否有更好更优雅的方法来实现下面的简单代码(diffYear、A 和 B 是数字): diffYear = yearA - yearB; if (diffYear == 0) { A = B
我正在设计一种语言,并尝试确定 true 应该是 0x01 还是 0xFF。显然,所有非零值都将转换为 true,但我正在尝试确定确切的内部表示。 每种选择的优点和缺点是什么? 最佳答案 没关系,只要
在我的 dialogfragment 类的 OnCreateDialog 中,我正在这样做: AlertDialog.Builder builder = new AlertDialog.Builder
这个问题在这里已经有了答案: Resolving ambiguous overload on function pointer and std::function for a lambda usin
我偶然发现了一个奇怪的 NSDecimalNumber 行为:对于某些值,调用 integerValue、longValue、longLongValue 等,返回意想不到的值(value)。示例: l
这个问题在这里已经有了答案: Resolving ambiguous overload on function pointer and std::function for a lambda using
我有这个正则表达式来测试用户输入是否有效: value.length === 0 || value === '-' || (!isNaN(parseFloat(value)) && /^-?\d+\.
我想用高斯混合模型拟合数据集,数据集包含大约 120k 个样本,每个样本有大约 130 个维度。当我使用 matlab 执行此操作时,我运行脚本(簇号为 1000): gm = fitgmdist(d
我是一名优秀的程序员,十分优秀!