匚w中文字符的正则表辑ּQ?[\u4e00-\u9fa5]
匚w双字节字W?包括汉字在内)Q[^\x00-\xff]
应用Q计字W串的长度(一个双字节字符长度?QASCII字符?Q?/span>
String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}
匚wI的正则表辑ּQ\n[\s| ]*\r
匚wHTML标记的正则表辑ּQ?<(.*)>.*<\/\1>|<(.*) \/>/
匚w首尾I格的正则表辑ּQ?^\s*)|(\s*$)
应用Qjavascript中没有像vbscript那样的trim函数Q我们就可以利用q个表达式来实现Q如下:
应用Qjavascript中没有像vbscript那样的trim函数Q我们就可以利用q个表达式来实现Q如下:String.prototype.trim = function()
{
return this.replace(/(^\s*)|(\s*$)/g, "");
}
利用正则表达式分解和转换IP地址Q?/span>
下面是利用正则表辑ּ匚wIP地址QƈIP地址转换成对应数值的JavascriptE序Q?/span>
function IP2V(ip)
{
re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匚wIP地址的正则表辑ּ
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
throw new Error("Not a valid IP address!")
}
}
不过上面的程序如果不用正则表辑ּQ而直接用split函数来分解可能更单,E序如下Q?/span>
var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是Q?+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))
匚wEmail地址的正则表辑ּQ\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匚w|址URL的正则表辑ּQhttp://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
利用正则表达式去除字串中重复的字W的法E序Q[注:此程序不正确Q原因见本脓回复]
var s="abacabefgeeii"
var s1=s.replace(/(.).*\1/g,"$1")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"")
alert(s1+s2) //l果为:abcefgi
我原来在CSDN上发贴寻求一个表辑ּ来实现去除重复字W的ҎQ最l没有找刎ͼq是我能惛_的最单的实现Ҏ。思\是用后向引用取出包括重复的字符Q再以重复的字符建立W二个表辑ּQ取C重复的字W,两者串q。这个方法对于字W顺序有要求的字W串可能不适用?/span>
得用正则表达式从URL地址中提取文件名的javascriptE序Q如下结果ؓpage1
s="http://www.9499.net/page1.htm"
s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")
alert(s)
利用正则表达式限制网表单里的文本框输入内容Q?/span>
用正则表辑ּ限制只能输入中文Qonkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
用正则表辑ּ限制只能输入全角字符Q?/span> onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"
用正则表辑ּ限制只能输入数字Qonkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
用正则表辑ּ限制只能输入数字和英文:onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
正则表达式,正规表达式,正则表达式匹配,正则表达式语法,模式匚wQ正规表辑ּ匚w javascript正则表达?ASP正则表达?ASP.NET正则表达?C#正则表达?JSP正则表达?PHP正则表达?VB.NET正则表达?VBSCript正则表达式编E?delphi正则表达?jscript
正则表达?regular expression
正则表达?RegExp
模式 pattern
匚w Match
.NET命名I间Q?System.Text.RegularExpression
补充Q?br/>^\d+$ //匚w非负整数Q正整数 + 0Q?br/>^[0-9]*[1-9][0-9]*$ //匚w正整?br/>^((-\d+)|(0+))$ //匚w非正整数Q负整数 + 0Q?br/>^-[0-9]*[1-9][0-9]*$ //匚w负整?br/>^-?\d+$ //匚w整数
^\d+(\.\d+)?$ //匚w非负点敎ͼ正QҎ + 0Q?br/>^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$ //匚w正QҎ
^((-\d+(\.\d+)?)|(0+(\.0+)?))$ //匚w非正点敎ͼ负QҎ + 0Q?br/>^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$ //匚w负QҎ
^(-?\d+)(\.\d+)?$ //匚w点?br/>^[A-Za-z]+$ //匚w?6个英文字母组成的字符?br/>^[A-Z]+$ //匚w?6个英文字母的大写l成的字W串
^[a-z]+$ //匚w?6个英文字母的写l成的字W串
^[A-Za-z0-9]+$ //匚w由数字和26个英文字母组成的字符?br/>^\w+$ //匚w由数字?6个英文字母或者下划线l成的字W串
^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$ //匚wemail地址
^[a-zA-z]+://匚w(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$ //匚wurl
利用正则表达式去除字串中重复的字W的法E序Q?br/>
var s="abacabefgeeii"
var s1=s.replace(/(.).*\1/g,"$1")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"")
alert(s1+s2) //l果为:abcefgi
===============================
如果var s = "abacabefggeeii"
l果׃对了Q结果ؓQabeicfgg
正则表达式的能力有限
RE: totoro
谢谢你的指点Q这个javascript正则表达式程序算法确实有问题Q我会试着找更好的办法!!!
1.认有效电子邮g格式
下面的代码示例用静?Regex.IsMatch Ҏ验证一个字W串是否为有效电子邮件格式。如果字W串包含一个有效的电子邮g地址Q则 IsValidEmail Ҏq回 trueQ否则返?falseQ但不采取其他Q何操作。您可以使用 IsValidEmailQ在应用E序地址存储在数据库中或昄?ASP.NET 中之前Q筛选出包含无效字符的电子邮件地址?br/>
[Visual Basic]
Function IsValidEmail(strIn As String) As Boolean
' Return true if strIn is in valid e-mail format.
Return Regex.IsMatch(strIn, ("^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$")
End Function
[C#]
bool IsValidEmail(string strIn)
{
// Return true if strIn is in valid e-mail format.
return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
}
2.清理输入字符?br/>下面的代码示例用静?Regex.Replace Ҏ从字W串中抽出无效字W。您可以使用q里定义?CleanInput ҎQ清除掉在接受用戯入的H体的文本字D中输入的可能有害的字符。CleanInput 在清除掉?@?Q连字符Q和 .Q句点)以外的所有非字母数字字符后返回一个字W串?br/>
[Visual Basic]
Function CleanInput(strIn As String) As String
' Replace invalid characters with empty strings.
Return Regex.Replace(strIn, "[^\w\.@-]", "")
End Function
[C#]
String CleanInput(string strIn)
{
// Replace invalid characters with empty strings.
return Regex.Replace(strIn, @"[^\w\.@-]", "");
}
3.更改日期格式
以下代码CZ使用 Regex.Replace Ҏ来用 dd-mm-yy 的日期Ş式代?mm/dd/yy 的日期Ş式?br/>
[Visual Basic]
Function MDYToDMY(input As String) As String
Return Regex.Replace(input, _
"\b(?<month>\d{1,2})/(?<day>\d{1,2})/(?<year>\d{2,4})\b", _
"${day}-${month}-${year}")
End Function
[C#]
String MDYToDMY(String input)
{
return Regex.Replace(input,
"\\b(?<month>\\d{1,2})/(?<day>\\d{1,2})/(?<year>\\d{2,4})\\b",
"${day}-${month}-${year}");
}
Regex 替换模式
本示例说明如何在 Regex.Replace 的替换模式中使用命名的反向引用。其中,替换表达?${day} 插入?(?<day>...) l捕L子字W串?br/>
有几U静态函C您可以在使用正则表达式操作时无需创徏昑ּ正则表达式对象,?Regex.Replace 函数正是其中之一。如果您不想保留~译的正则表辑ּQ这给您带来方?br/>
4.提取 URL 信息
以下代码CZ使用 Match.Result 来从 URL 提取协议和端口号。例如,"http://www.contoso.com:8080/letters/readme.html"返?http:8080"?br/>
[Visual Basic]
Function Extension(url As String) As String
Dim r As New Regex("^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/", _
RegexOptions.Compiled)
Return r.Match(url).Result("${proto}${port}")
End Function
[C#]
String Extension(String url)
{
Regex r = new Regex(@"^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/",
RegexOptions.Compiled);
return r.Match(url).Result("${proto}${port}");
}
普通字W由所有那些未昑ּ指定为元字符的打印和非打印字W组成。这包括所有的大写和小写字母字W,所有数字,所有标点符号以及一些符受?/p>
最单的正则表达式是一个单独的普通字W,可以匚w所搜烦字符串中的该字符本n。例如,单字W模?'A' 可以匚w所搜烦字符串中M位置出现的字?'A'。这里有一些单字符正则表达式模式的CZQ?/p>
/a/ /7/ /M/
{h?VBScript 单字W正则表辑ּ为:
"a" "7" "M"
可以多个单字符l合在一起得C个较大的表达式。例如,下面?JScript 正则表达式不是别的,是通过l合单字W表辑ּ 'a'?7'以及 'M' 所创徏出来的一个表辑ּ?/p>
/a7M/
{h?VBScript 表达式ؓQ?/p>
"a7M"
h意这里没有连接操作符。所需要做的就是将一个字W放在了另一个字W后面?/p>
有不元字符在试囑֯其进行匹配时需要进行特D的处理。要匚wq些Ҏ字符Q必首先将q些字符转义Q也是在前面用一个反斜杠 (\)。下表给Zq些Ҏ字符及其含义Q?/p>
Ҏ字符 | 说明 |
---|---|
$ | 匚w输入字符串的l尾位置。如果设|了 RegExp 对象?Multiline 属性,?$ 也匹?'\n' ?'\r'。要匚w $ 字符本nQ请使用 \$?/td> |
( ) | 标记一个子表达式的开始和l束位置。子表达式可以获取供以后使用。要匚wq些字符Q请使用 \( ?\)?/td> |
* | 匚w前面的子表达式零ơ或多次。要匚w * 字符Q请使用 \*?/td> |
+ | 匚w前面的子表达式一ơ或多次。要匚w + 字符Q请使用 \+?/td> |
. | 匚w除换行符 \n之外的Q何单字符。要匚w .Q请使用 \?/td> |
[ | 标记一个中括号表达式的开始。要匚w [Q请使用 \[?/td> |
? | 匚w前面的子表达式零ơ或一ơ,或指明一个非贪婪限定W。要匚w ? 字符Q请使用 \??/td> |
\ | 下一个字W标Cؓ或特D字W、或原义字符、或后向引用、或八进制{义符。例如, 'n' 匚w字符 'n'?\n' 匚w换行W。序?'\\' 匚w "\"Q?'\(' 则匹?"("?/td> |
^ | 匚w输入字符串的开始位|,除非在方括号表达式中使用Q此时它表示不接受该字符集合。要匚w ^ 字符本nQ请使用 \^?/td> |
{ | 标记限定W表辑ּ的开始。要匚w {Q请使用 \{?/td> |
| | 指明两项之间的一个选择。要匚w |Q请使用 \|?/td> |
有不很有用的非打印字符Q偶必M用。下表显CZ用来表示q些非打印字W的转义序列Q?/p>
字符 | 含义 |
---|---|
\cx | 匚w?em>x指明的控制字W。例如, \cM 匚w一?Control-M 或回车符?x 的值必Mؓ A-Z ?a-z 之一。否则,?c 视ؓ一个原义的 'c' 字符?/td> |
\f | 匚w一个换늬。等价于 \x0c ?\cL?/td> |
\n | 匚w一个换行符。等价于 \x0a ?\cJ?/td> |
\r | 匚w一个回车符。等价于 \x0d ?\cM?/td> |
\s | 匚wMI白字符Q包括空根{制表符、换늬{等。等价于 [ \f\n\r\t\v]?/td> |
\S | 匚wM非空白字W。等价于 [^ \f\n\r\t\v]?/td> |
\t | 匚w一个制表符。等价于 \x09 ?\cI?/td> |
\v | 匚w一个垂直制表符。等价于 \x0b ?\cK?/td> |
句点 (.) 匚w一个字W串中Q何单个的打印或非打印字符Q除了换行符 (\n) 之外。下面的 JScript 正则表达式可以匹?'aac'?abc'?acc'?adc'如此{等Q同样也可以匚w 'a1c'?a2c'、a-c'以及 a#c'Q?/p>
/a.c/
{h?VBScript 正则表达式ؓQ?/p>
"a.c"
如果试图匚w一个包含文件名的字W串Q其中句?(.) 是输入字W串的一部分Q则可以在正则表辑ּ中的句点前面加上一个反斜杠 (\) 字符来实现这一要求。D例来_下面?JScript 正则表达式就能匹?'filename.ext'Q?/p>
/filename\.ext/
?VBScript 而言Q等L表达式如下所C:
"filename\.ext"
q些表达式仍然是相当有限的。它们只允许匚wM单字W。很多情况下Q对从列表中匚wҎ字符十分有用。例如,如果输入文字中包含用数字表示为Chapter 1, Chapter 2诸如此类的章节标题,你可能需要找到这些章节标题?/p>
可以在一个方括号 ([ ?]) 中放入一个或多个单字W,来创Z个待匚w的列表。如果字W被攑օ括号中括hQ则该列表称?em>括号表达?/em>。括号内和其他Q何地方一P普通字W代表其本nQ也是_它们匚w输入文字中出现的一处自己。大多数Ҏ字符在位于括可辑ּ中时都将失去其含义。这里有一些例外:
括号表达式中所包含的字W只匚w该括可辑ּ在正则表辑ּ中所处位|的一个单字符。下面的 JScript 正则表达式可以匹?'Chapter 1'?Chapter 2'?Chapter 3'?Chapter 4' 以及 'Chapter 5'Q?/p>
/Chapter [12345]/
?VBScript 中要匚w同样的章节标题,请用下面的表达式:
"Chapter [12345]"
h意单?'Chapter' 及后面的I格与括号内的字W的位置关系是固定的。因此,括号表达式只用来指定满紧跟在单?'Chapter' 和一个空g后的单字W位|的字符集合。这里是W九个字W位|?/p>
如果希望使用范围而不是字W本w来表示待匹配的字符Q则可以使用q字W将该范围的开始和l束字符分开。每个字W的字符值将军_其在一个范围内的相寚w序。下面的 JScript 正则表达式包含了一个等价于上面所C的括号列表的范围表辑ּ?/p>
/Chapter [1-5]/
VBScipt 中相同功能的表达式如下所C:
"Chapter [1-5]"
如果以这U方式指定范_则开始和l束值都包括在该范围内。有一点特别需要注意的是,?Unicode 排序中v始g定要在结束g前?/p>
如果惛_括号表达式中包括q字W,则必M用下q方法之一Q?/p>
[\-]
[-a-z] [a-z-]
[!--] [!-~]
同样Q通过在列表开始处攄一个插入符(^)Q就可以查找所有不在列表或范围中的字符。如果该插入W出现在列表的其他位|,则匹配其本nQ没有Q何特D含义。下面的 JScript 正则表达式匹配章节号大于 5 的章节标题:
/Chapter [^12345]/
?VBScript 则用:
"Chapter [^12345]"
在上面所C的CZ中,表达式将匚wW九个位|处?, 2, 3, 4, or 5 之外的Q何数字字W。因此, 'Chapter 7' Z个匹配,同样 'Chapter 9' 也是如此?/p>
上面的表辑ּ可以使用q字W?(-) 表示。对 JScript 为:
/Chapter [^1-5]/
或者,?VBScript 为:
"Chapter [^1-5]"
括号表达式的典型用法是指定对M大写或小写字母字W或M数字的匹配。下面的 JScript 表达式给Zq一匚wQ?/p>
/[A-Za-z0-9]/
{h?VBScript 表达式ؓQ?/p>
"[A-Za-z0-9]"