`
heimuad
  • 浏览: 296869 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

js正则表达式zz

阅读更多

<%--

js正则表达式
2007-09-02 16:54

正则表达式可以通过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>

 

--%>

分享到:
评论
2 楼 heimuad 2007-09-20  
更多使用方法(Js/Ajax/Css)见:http://www.87717.com/Javascript/

在javascript中,String的函数replace()简直太让人喜爱了。它灵活而强大的字符替换处理能力,让我不禁想向大家介绍它。

  replace()最简单的算是能力就是简单的字符替换。示例代码如下:

<script language="javascript">
var strM = "javascript is a good script language";
//在此我想将字母a替换成字母A
alert(strM.replace("a","A"));
</script>

  我想大家运行后可以看到结果,它只替换了首字母。但如果加上正则表达式结果就不一样了!呵呵,没错。replace()支持正则表达式,它可以按照正则表达式的规则匹配字符或字符串,然后给予替换!

<script language="javascript">
var strM = "javascript is a good script language";
//在此我想将字母a替换成字母A
alert(strM.replace(/a/,"A"));
</script>

  呵呵,您一定发现了。这样还是只替换了第一个字母a。如果您熟悉正则,那这就难不住您。稍加修改就OK了。

<script language="javascript">

字串2


var strM = "javascript is a good script language";
//在此将字母a全部替换成字母A
alert(strM.replace(/a/g,"A"));
</script>

  还可以这样,看看效果!

<script language="javascript">
var strM = "javascript is a good script language";
alert(strM.replace(/(javascript)\s*(is)/g,"$1 $2 fun. it $2"));
</script>

  我这儿举的例子都是很简单的应用,replace()在此点上与您使用正则表达式的能力成正比。您正则表达式越强,呵呵,那您就会越疯狂的爱上它。

  当然,我这儿推荐replace()的原因并不因为它能与正则表达式合作,而在于它还能与函数进行合作,发挥出强大的功能。

  先看看简单例子:将所有单词首字母换成大写。

<script language="javascript">
var strM = "javascript is a good script language";
function change(word)
{
 return word.indexOf(0).toUpperCase()+word.substring(1);
}
alert(strM.replace(/\b\w+\b/g,change)); 字串9
</script>

  由上可知,当正则表达式有"g"标志时,代表将处理整个字符串,即函数change的变换将应用于所有匹配的对象。而该函数有三个或更多参数,具体个数视正则表达式而定。

  有了函数与正则表达式的配合,replace()处理字符串的功能空前强大起来了!

  最后还举个例子,将字符串所有单词倒序,用replace()处理是如此简单。

<script language="javascript">
var strM = "javascript is a good script language";
function change(word)
{
 var result = word.match(/(\w)/g);
if ( result )
{
 var str = "";
  for ( var i=result.length-1; i>=0; i-- )
 {
   str += result;
 }
 return str;
}
else
{
  return "null";
}
}
alert(strM.replace(/\b(\w)+\b/g,change));
</script>
1 楼 heimuad 2007-09-20  
p_input1 = "****";
p_input2 = p_input1.replace(/\*/g,'a');
alert(p_input2);

相关推荐

    经典Javascript正则表达式

    以下是一些经典的JavaScript正则表达式及其应用场景: 1. **匹配中文字符**: `[\u4e00-\u9fa5]` 这个正则表达式可以用来匹配Unicode范围内的中文字符。在JavaScript中,它可以帮助你在处理中文字符串时进行筛选或...

    javascript 正则表达式触发函数进行高级替换

    在JavaScript中,正则表达式提供了非常强大的文本处理能力,其中一种高级用法就是通过触发函数来进行复杂的替换操作。在常规的替换中,我们通常使用`replace()`方法结合正则表达式来替换字符串中匹配的部分,例如: ...

    JS表单数据验证的正则表达式(常用)

    常用的验证方法: checkUserNameflag=false; checkPasswordflag=false;... var zz = /^[A-Za-z0-9]{6,}$/; if (!zz.test(username)) { $(userName_warn)[removed] = × 用户名不符合规范; chec

    人善帝王心POST工具1.9.0.1.zip

    【人善帝王心POST工具1.9.0.1】是一款专为程序员设计的开发辅助软件,它在编程过程中提供了强大的功能,包括POST请求发送、编码转换、JavaScript调试以及正则表达式测试等,极大地提高了开发效率和问题解决能力。...

    gex:JavaScript的Glob表达式

    “当正则表达式太难了!” 使用*和?匹配glob表达式针对任何JavaScript数据类型。 字符*表示可以匹配任何长度的字符,? 表示完全匹配任何字符之一,而所有其他字符都匹配它们自己。 const { Gex } = require('gex...

    leetcode算法分组-javascript_algorithms:各种算法在Javascript中的实现

    Anagrams,使用正则表达式和循环解决(来自 LeetCode ) 唯一路径 - 动态规划问题,使用蛮力解决,然后使用自上而下的方法加速(来自 LeetCode ) 排序颜色 - 排序挑战,首先使用计数排序解决,然后应用上下文特定...

    Selenium私房菜系列9 -- Selenium RC服务器命令行参数列表【ZZ】.doc

    正则表达式和替换字符串,用于在所有测试的HTML内容中进行查找和替换。这个标志可以多次使用。 16. **系统属性配置**: `-Dhttp.proxyHost`和`-Dhttp.proxyPort`用于设置HTTP代理服务器的主机和端口。如果需要...

    简单的移动设备检测PHP脚本代码

    - 正则表达式匹配:使用两个正则表达式对用户代理进行匹配。 - 第一个正则表达式用于匹配常见的移动设备品牌、型号和操作系统。 - 第二个正则表达式用于匹配更多具体的设备型号。 - 返回值:如果匹配成功,则...

    JS实现加载时锁定HTML页面元素的方法

    - **正则表达式技巧大全**:提供了JavaScript中正则表达式的使用方法和常见场景,以便进行复杂的文本处理。 - **数学运算用法总结**:介绍了JavaScript中的各种数学函数和运算方法,以及它们在不同场景下的应用。 ...

    如何基于js判断浏览器版本

    但这只是一种基本方法,对于某些特定的浏览器或版本,可能需要更精确的正则表达式来匹配。此外,由于浏览器的更新和新特性,开发者需要持续关注新的标识符以便正确识别新的浏览器版本。 需要注意的是,随着浏览器...

    py爬虫GushiwenSpider-master-new

    根据项目名称推测,该项目可能使用了Python标准库中的requests进行网络请求,使用BeautifulSoup或者lxml进行HTML解析,同时结合正则表达式提高数据提取效率。 #### 2.3 实现流程 1. **定义URL列表**:首先明确目标...

    appmobile:使用 Jquery 检测 userAgent 是否为移动设备

    首先,我们可以直接使用JavaScript原生的`navigator.userAgent`属性来获取`userAgent`字符串,然后通过正则表达式匹配来判断是否为移动设备。例如: ```javascript function isMobileDevice() { return (typeof ...

    py爬虫weibo-crawler-master

    - **数据解析层**:使用正则表达式、XPath等技术解析HTML文档,提取有用的信息。 - **数据存储层**:将解析后的数据存储到本地文件或数据库中。 **异常处理与错误恢复机制:** - **异常捕获**:使用try-except语句...

Global site tag (gtag.js) - Google Analytics