正则表达式可以通过javascript的字符串和
regexp来使用。
每个javascript字符串都可以通过三种方法来支持正则表达式,这三种方法是match()、replace()和search(),而且表达式对象本身还有多种方法。先介绍每个字符串可以支持的match()、replace()和search()方法的信息:
match(): 用于正则表达式匹配,如果多个匹配出现,则返回一个含有所有匹配结果的数组,数组中的每一个条目都是一份包含了匹配数据的拷贝;如果没有匹配值,则返回空值。
array=str.match(/表达式/);
replace(): 用于正则表达式匹配并将所有的匹配值替换为新的子字符串,本方法的第一个参数是正则表达式,第二个参数是进行替换的字符串。
newstr=str.replace(/表达式/,'要替换的字符串‘);
search(): 用于在正则表达式与指定字符串之间搜索匹配值,如果出现匹配值,则返回字符串的索引值,如果没有匹配值,则返回-1。
str or num =str.search(/表达式/);
javascript 还提供了
regexp对象来创建并使用正则表达式。
regexp 对象包含了正则表达式的模式,该对象的方法和属性可以用来匹配字符串,有两种方法可以用来创建
regexp对象的实例:使用构造函数或使用正则表达式文本模式的文字方式,第二个参数是可选的,该参数可以指定该搜索是全局的(g)、忽略大小写的(i)或者全局同时忽略大小写(gi)。以下的例子是使用构造函数创建
regexp对象的方法,在这个例子中,搜索对象的大小写是被忽略的:
testregexp = new
regexp("^search$","i")
您可以使用文字方式来创建相同的实例(在斜杠中的部分),如下所示:
testregexp = /^search$/i
regexp
正则表达式对象的属性及方法
预定义的正则表达式拥有有以下静态属性:input, multiline, lastMatch, lastParen, leftContext, rightContext和$1到$9。其中input和multiline可以预设置。其他属性的值在执行过exec或test方法后被根据不同条件赋以不同的值。许多属性同时拥有长和短(perl风格)的两个名字,并且,这两个名字指向同一个值。(JavaScript模拟perl的正则表达式)
正则表达式对象的属性 属性 含义
$1…$9 如果它(们)存在,是匹配到的子串
$_ 参见input
$* 参见multiline
$& 参见lastMatch
$+ 参见lastParen
$` 参见leftContext
$’ 参见rightContext
constructor 创建一个对象的一个特殊的函数原型
global 是否在整个串中匹配(bool型)
ignoreCase 匹配时是否忽略大小写(bool型)
input 被匹配的串
lastIndex 最后一次匹配的索引
lastParen 最后一个括号括起来的子串
leftContext 最近一次匹配以左的子串
multiline 是否进行多行匹配(bool型)
prototype 允许附加属性给对象
rightContext 最近一次匹配以右的子串
source 正则表达式模式
lastIndex 最后一次匹配的索引
正则表达式对象的方法
方法 含义
compile 正则表达式比较
exec 执行查找
test 进行匹配
toSource 返回特定对象的定义(literal representing),其值可用来创建一个新的对象。重载Object.toSource方法得到的。
toString 返回特定对象的串。重载Object.toString方法得到的。
valueOf 返回特定对象的原始值。重载Object.valueOf方法得到
test方法将对指定字符串进行正则表达式匹配,如果成功则返回true,失败则返回false,该方法可以应用在文字字符串或者字符串变量上,基本上,它允许您对一个字符串进行正则表达式匹配,以下的例子演示了如何使用这个方法:
testregexp = /search/i;
if (testregexp.test("this is a search string") {
document.write("the string was found.");
} else {
document.write("no match found.");
}
基本语法
正则表达式的语法可以应用得很复杂,甚至需要一整本书来讲解这个题目,但是我将讲解其中一部分基本知识来帮助您获取正则表达式的初步认识。
一个基本概念是锚(anchor),它允许您指定字符串的起点和终点,脱字符(^)用于指定字符串的起点而美元符号($)则表示终点。如果需要在查询字符串中含有脱字符或者美元符号,您可以使用转义序列来实现,转义字符(\)是优先于脱字符或者美元符号之处理的。以下的例子会在单词search在字符串中出现时进行匹配。
^search$
而且,您还可以查找一组字符,只要将它们放在方括号中就行了,比如[ and ],相匹配的字符必需属于这个字符组,一个例子是在[12345]的范围内寻找匹配的数字1到5,该正则表达式也可以写作[1-5]。
很多时候您可能需要指定可以出现多次的字符,或者可选的字符,问号(@)的意思是该字符是可选的,加号(+)的意思是该字符可以出现一次或者多次,
星号(*)的意思是该字符可以不出现或者出现多次。
现在让我们来看看如何将这些简单的正则表达式应用到javascript上。
we can place it in a web page to test:
<html><head>
<title>
regexp test</title>
</head><body>
<script language="javascript">
testregexp = /search/i;
if (testregexp.test("this is a search string")) {
alert("the string was found.");
} else {
alert("no match found.");
}
</script></body></html>
实际操作
现在是讲解更加完整的例子的时候了,在列表a中的网页包含了javascript方法来验证文本框中输入的值,这段javascript代码将搜索包含我的姓氏和我的两个名字的字符串(忽略大小写),如果找到了我的名字,则通过字符串对象的替换方法(search)将其替换为一个短名字。第二个文本框是用于接受时间值的,一个正则表达式在此对输入的时间进行合法性验证(数字是通过冒号分割的)。这个简单的例子说明了如何在您的客户端代码中加入正则表达式来进行匹配和替换:
<html><head>
<title>
regexp validation</title>
<script language="javascript">
function validate() {
var doc = document.test;
varvalname = new
regexp("^(tony|anthony) patton", "i");
if (doc.name.value.match(valname) == null) {
alert("name was not found.");
} else {
doc.name.value = doc.name.value.replace(valname, "t. patton");
}
varvaltime = new
regexp("^([0-1][0-9]|[2][0-3]):([0-5][0-9])$");
if (doc.time.value.match(valtime) == null) {
alert("please enter correct time format (hh:ss)");
} }
</script></head>
<body><form name="test">
name: <input type="text" name="name" value=""><br>
time: <input type="text" name="time" value=""><br>
<input type="button" name="test" value="test" onclick="validate();">
</form></body></html>
相关推荐
以下是一些经典的JavaScript正则表达式及其应用场景: 1. **匹配中文字符**: `[\u4e00-\u9fa5]` 这个正则表达式可以用来匹配Unicode范围内的中文字符。在JavaScript中,它可以帮助你在处理中文字符串时进行筛选或...
在JavaScript中,正则表达式提供了非常强大的文本处理能力,其中一种高级用法就是通过触发函数来进行复杂的替换操作。在常规的替换中,我们通常使用`replace()`方法结合正则表达式来替换字符串中匹配的部分,例如: ...
常用的验证方法: checkUserNameflag=false; checkPasswordflag=false;... var zz = /^[A-Za-z0-9]{6,}$/; if (!zz.test(username)) { $(userName_warn)[removed] = × 用户名不符合规范; chec
【人善帝王心POST工具1.9.0.1】是一款专为程序员设计的开发辅助软件,它在编程过程中提供了强大的功能,包括POST请求发送、编码转换、JavaScript调试以及正则表达式测试等,极大地提高了开发效率和问题解决能力。...
“当正则表达式太难了!” 使用*和?匹配glob表达式针对任何JavaScript数据类型。 字符*表示可以匹配任何长度的字符,? 表示完全匹配任何字符之一,而所有其他字符都匹配它们自己。 const { Gex } = require('gex...
Anagrams,使用正则表达式和循环解决(来自 LeetCode ) 唯一路径 - 动态规划问题,使用蛮力解决,然后使用自上而下的方法加速(来自 LeetCode ) 排序颜色 - 排序挑战,首先使用计数排序解决,然后应用上下文特定...
正则表达式和替换字符串,用于在所有测试的HTML内容中进行查找和替换。这个标志可以多次使用。 16. **系统属性配置**: `-Dhttp.proxyHost`和`-Dhttp.proxyPort`用于设置HTTP代理服务器的主机和端口。如果需要...
- 正则表达式匹配:使用两个正则表达式对用户代理进行匹配。 - 第一个正则表达式用于匹配常见的移动设备品牌、型号和操作系统。 - 第二个正则表达式用于匹配更多具体的设备型号。 - 返回值:如果匹配成功,则...
- **正则表达式技巧大全**:提供了JavaScript中正则表达式的使用方法和常见场景,以便进行复杂的文本处理。 - **数学运算用法总结**:介绍了JavaScript中的各种数学函数和运算方法,以及它们在不同场景下的应用。 ...
但这只是一种基本方法,对于某些特定的浏览器或版本,可能需要更精确的正则表达式来匹配。此外,由于浏览器的更新和新特性,开发者需要持续关注新的标识符以便正确识别新的浏览器版本。 需要注意的是,随着浏览器...
根据项目名称推测,该项目可能使用了Python标准库中的requests进行网络请求,使用BeautifulSoup或者lxml进行HTML解析,同时结合正则表达式提高数据提取效率。 #### 2.3 实现流程 1. **定义URL列表**:首先明确目标...
首先,我们可以直接使用JavaScript原生的`navigator.userAgent`属性来获取`userAgent`字符串,然后通过正则表达式匹配来判断是否为移动设备。例如: ```javascript function isMobileDevice() { return (typeof ...
- **数据解析层**:使用正则表达式、XPath等技术解析HTML文档,提取有用的信息。 - **数据存储层**:将解析后的数据存储到本地文件或数据库中。 **异常处理与错误恢复机制:** - **异常捕获**:使用try-except语句...