如果没有空格字符,则以下正则表达式有效,但如果输入具有空格字符,则它不起作用(它看起来像链接但JavaScript不起作用)。
我该如何更改?
正则表达式应适用于World
和The World
。
Dim makebkz As String
Dim pattern As String = "\(bkz: ([a-z0-9$&.öışçğü\s]+)\)"
Dim regex As New Regex(pattern, RegexOptions.IgnoreCase)
Dim myAnchor As New System.Web.UI.HtmlControls.HtmlAnchor()
Dim postbackRef As String = Page.GetPostBackEventReference(myAnchor, "$1")
myAnchor.HRef = postbackRef
str = regex.Replace(str, "(bkz: <a href=javascript:" & myAnchor.HRef & "><font color=""#CC0000"">$1</font></a> )")
makebkz = str
Return makebkz
答案 0 :(得分:2)
实际上,有一个空间'字符'。它是'\ s'(减去引号)。
答案 1 :(得分:2)
我认为应该改变这一行:
str = regex.Replace(str, "(bkz: <a href=javascript:" & myAnchor.HRef & "><font color=""#CC0000"">$1</font></a> )")
如果我正确地读了你的代码,你在HRef中包含$ 1(这就是Page.GetPostBackEventReference(myAnchor,“$ 1”)正在做的事情),然后在字体标签和href之间的文本中替换它,所以你的输出将是这样的:
(bkz: <a href=javascript:__doPostBack(The World)><font color=""#CC0000"">The World</font></a> )
如果你更新你的替换功能,它应该工作:
str = regex.Replace(str, "(bkz: <a href=""javascript:" & myAnchor.HRef & """><font color=""#CC0000"">$1</font></a> )")
即。用引号括起javascript调用,你的世界将会很好。
答案 2 :(得分:1)
\ s 将匹配任何空格字符。一定要妥善解决这个问题。
答案 3 :(得分:1)
为了清楚起见,您是否说(bkz: world)
之类的内容有效,但(bkz: the world)
却没有?
您目前拥有的正则表达式将匹配两者(在RegexBuddy中进行验证),并且您的捕获组应该没问题(它应该在第一种情况下捕获world
并在第二种情况下捕获the world
。
在事情无效的情况下,在致电str
后,Replace
中存储的内容是什么?我的猜测是你生成的字符串是问题所在,而不是正则表达式本身。
答案 4 :(得分:0)
尝试使空格字符有条件\ s *表示bkz:block之间可以有0个或多个空格。你也可以使用\ s?如果有0或1个空格。
Dim pattern As String = "\(bkz:\s*([a-z0-9$&.öışçğü\s]+)\)"
虽然由于你的第二个模式包含一个空格的匹配,你可能需要扩展你的表达式,以表明parenthisized匹配中的第一个字符不是空格,这里是一个样本。
Dim pattern As String = "\(bkz:\s*([a-z0-9$&.öışçğü][a-z0-9$&.öışçğü\s]+)\)"