请教正则这样写"dd$pp".replace(/[\$]/g,"dangdang"); 正则这样写"dd$pp".replace(/[\$]/g,"dangdang");和正则这样写"dd$pp".replace(/[$]/g,"dangdang");是一样的,为什么呢。第二种不标准? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没纠结,以为不转义至少在IE下不通呢,所以问问。thank u. 字符串中的单一'\'会被浏览器忽略掉(特殊含义除外),若要匹配折号,需指定为‘\\’。我觉得你此处用第二种更合理。 试试这个:"dd\\$pp".replace(/[\\$]/g,"dangdang"); 哥有资料:2.3 .NET正则中字符组的转义在字符组[]中,元字符通常是不需要转义的,甚至于“[”也是不需要转义的。string test = @"the test string: . $ ^ { [ ( | ) * + ? \";Regex reg = new Regex(@"[.$^{[(|)*+?\\]");MatchCollection mc = reg.Matches(test);foreach (Match m in mc){ richTextBox2.Text += m.Value + "\n";}/*--------输出--------.$^{[(|)*+?\*/但是在正则书写时,字符组中的“[”还是建议使用“\[”对其转义的,正则本身就已经是非常抽象,可读性很低的了,如果在字符组中再掺杂进这样不经转义的“[”,会使得可读性更差。而且在出现不正确的嵌套时,可能会导致正则编译异常,以下正则在编译时就会抛异常的。Regex reg = new Regex(@"[.$^{[(]|)*+?\\]");然而,.NET的字符组中,是支持集合减法的,在这种正常语法形式下,是允许字符组嵌套的。string test = @"abcdefghijklmnopqrstuvwxyz";Regex reg = new Regex(@"[a-z-[aeiou]]+");MatchCollection mc = reg.Matches(test);foreach (Match m in mc){ richTextBox2.Text += m.Value + "\n";}/*--------输出--------bcdfghjklmnpqrstvwxyz*/这种用法可读性很差,应用也很少见,即使有这种需求也可以通过其它方式实现,了解一下即可,不必深究。话题再回到转义上,字符组中必须转义的只有“\”,而“[”和“]”出现在字符组中时,也是建议一定做转义处理的。另外有两个字符“^”和“-”,出现在字符组中特定位置时,如果要匹配其本身,也是需要转义的。“^”出现在字符组开始位置,表示排除型字符组,“[^Char]”也就是匹配除字符组中包含的字符之外的任意一个字符,比如“[^0-9]”表示除数字外的任意一个字符。所以在字符组中,要匹配“^”字符本身,要么不放在字符组开始位置,要么用“\^”进行转义。Regex reg1 = new Regex(@"[0-9^]");Regex reg2 = new Regex(@"[\^0-9]");这两种方式都表达匹配任意一个数字或普通字符“^”。至于“-”在字符组中特殊性,举一个例子。string test = @"$";Regex reg = new Regex(@"[#-*%&]");richTextBox2.Text = "匹配结果:" + reg.IsMatch(test);/*--------输出--------匹配结果:True*/正则表达式中明明没有“$”,为什么匹配结果会是“True”呢?[]支持用连字符“-”连接两个字符,来表示一个字符范围。需要注意的是,“-”前后的两个字符是有顺序的,在使用相同的编码时,后面的字符码位应大于或等于前面字符的码位。for (int i = '#'; i <= '*'; i++){ richTextBox2.Text += (char)i + "\n";} /*--------输出--------#$%&'()**/由于“#”和“*”符合要求,“[#-*]”可以表示一个字符范围,其中就包含了字符“$”,所以上面的正则是可以匹配“$”的,如果只是把“-”当作一个普通字符处理,那么要么换个位置,要么把“-”转义。Regex reg1 = new Regex(@"[#*%&-]");Regex reg2 = new Regex(@"[#\-*%&]");这两种方式都表示匹配字符组中列举的字符中的任意一个。在字符组中,还有一个比较特殊的转义字符,“\b”出现在正则表达式中一般位置时,表示单词边界,也就是一侧为组成单词的字符,另一侧不是;而当“\b”出现在字符组中时,表示的是退格符,与普通字符串中出现的“\b”意义是一样的。同样的,还有一个容易被忽视,而且经常被忽视的转义符“|”,当“|”出现在正则表达式中一般位置时,表示左右两侧“或”的关系;而当“|”出现在字符组中时,它仅仅表示“|”字符本身,没有任何特殊意义,所以如果不是要匹配“|”本身,而试图在字符组中使用“|”时,是错误的。比如正则表达式“[a|b]”表示的是“a”、“b”、“|”中的任意一个,而不是“a”或“b”。 firefox中在div插入frame时总是超出,求帮助 如何自动跳到下一个输入框?(不是按回车,有难度) 原型疑惑? 如何查找上级元素的id JS赋值问题 类似这样的:confirm("是否真的要删除当前记录?") 再次求教 如何使窗口在打开后,控制他,使窗口最大化 $("#id").append("html")添加html后页面显示问题。 【悬赏10】 获取控件,模拟点击按钮 请问如何清除登录信息 请大家帮忙写个正则
我觉得你此处用第二种更合理。
试试这个:"dd\\$pp".replace(/[\\$]/g,"dangdang");
2.3 .NET正则中字符组的转义
在字符组[]中,元字符通常是不需要转义的,甚至于“[”也是不需要转义的。
string test = @"the test string: . $ ^ { [ ( | ) * + ? \";
Regex reg = new Regex(@"[.$^{[(|)*+?\\]");
MatchCollection mc = reg.Matches(test);
foreach (Match m in mc)
{
richTextBox2.Text += m.Value + "\n";
}
/*--------输出--------
.
$
^
{
[
(
|
)
*
+
?
\
*/
但是在正则书写时,字符组中的“[”还是建议使用“\[”对其转义的,正则本身就已经是非常抽象,可读性很低的了,如果在字符组中再掺杂进这样不经转义的“[”,会使得可读性更差。而且在出现不正确的嵌套时,可能会导致正则编译异常,以下正则在编译时就会抛异常的。
Regex reg = new Regex(@"[.$^{[(]|)*+?\\]");
然而,.NET的字符组中,是支持集合减法的,在这种正常语法形式下,是允许字符组嵌套的。
string test = @"abcdefghijklmnopqrstuvwxyz";
Regex reg = new Regex(@"[a-z-[aeiou]]+");
MatchCollection mc = reg.Matches(test);
foreach (Match m in mc)
{
richTextBox2.Text += m.Value + "\n";
}
/*--------输出--------
bcd
fgh
jklmn
pqrst
vwxyz
*/
这种用法可读性很差,应用也很少见,即使有这种需求也可以通过其它方式实现,了解一下即可,不必深究。
话题再回到转义上,字符组中必须转义的只有“\”,而“[”和“]”出现在字符组中时,也是建议一定做转义处理的。另外有两个字符“^”和“-”,出现在字符组中特定位置时,如果要匹配其本身,也是需要转义的。
“^”出现在字符组开始位置,表示排除型字符组,“[^Char]”也就是匹配除字符组中包含的字符之外的任意一个字符,比如“[^0-9]”表示除数字外的任意一个字符。所以在字符组中,要匹配“^”字符本身,要么不放在字符组开始位置,要么用“\^”进行转义。
Regex reg1 = new Regex(@"[0-9^]");
Regex reg2 = new Regex(@"[\^0-9]");
这两种方式都表达匹配任意一个数字或普通字符“^”。
至于“-”在字符组中特殊性,举一个例子。
string test = @"$";
Regex reg = new Regex(@"[#-*%&]");
richTextBox2.Text = "匹配结果:" + reg.IsMatch(test);
/*--------输出--------
匹配结果:True
*/
正则表达式中明明没有“$”,为什么匹配结果会是“True”呢?
[]支持用连字符“-”连接两个字符,来表示一个字符范围。需要注意的是,“-”前后的两个字符是有顺序的,在使用相同的编码时,后面的字符码位应大于或等于前面字符的码位。
for (int i = '#'; i <= '*'; i++)
{
richTextBox2.Text += (char)i + "\n";
}
/*--------输出--------
#
$
%
&
'
(
)
*
*/
由于“#”和“*”符合要求,“[#-*]”可以表示一个字符范围,其中就包含了字符“$”,所以上面的正则是可以匹配“$”的,如果只是把“-”当作一个普通字符处理,那么要么换个位置,要么把“-”转义。
Regex reg1 = new Regex(@"[#*%&-]");
Regex reg2 = new Regex(@"[#\-*%&]");
这两种方式都表示匹配字符组中列举的字符中的任意一个。
在字符组中,还有一个比较特殊的转义字符,“\b”出现在正则表达式中一般位置时,表示单词边界,也就是一侧为组成单词的字符,另一侧不是;而当“\b”出现在字符组中时,表示的是退格符,与普通字符串中出现的“\b”意义是一样的。
同样的,还有一个容易被忽视,而且经常被忽视的转义符“|”,当“|”出现在正则表达式中一般位置时,表示左右两侧“或”的关系;而当“|”出现在字符组中时,它仅仅表示“|”字符本身,没有任何特殊意义,所以如果不是要匹配“|”本身,而试图在字符组中使用“|”时,是错误的。比如正则表达式“[a|b]”表示的是“a”、“b”、“|”中的任意一个,而不是“a”或“b”。