2012-12-18 46 views
0

我想用.match()方法匹配特定模式,但我有点困惑。我有一个看起来像这样的字符串。.match特定模式

SomeError on example.com/register/ 
[u'Some Error Message Here, That we want to parse']. 

Some more text here 
Some more text here 

我试图从上面的字符串解析出Some Error Message Here, That we want to parse文本。目前regex,我现在用的就是:

response.match(/.*[u'(.*).*']/) 

这给了我:

[u'Some Error Message Here, That we want to parse.' 

,但我也想消除[u''一部分,这样的结果看起来是这样的:

Some Error Message Here, That we want to parse 

请让我知道我做错了什么。由于

回答

1

不要忘了逃跑括号([]):

response.match(/.*\[u'(.*).*'\]/) 
+0

感谢您的答复@Samuel,但使用上述正则表达式将返回'[u'Invalid值调试电子邮件,请重试'),对电子邮件进行无效值调试,请稍后再试或向我们报告问题。'。我不明白为什么。 – Amyth

+0

是匹配返回数组,字符串匹配的第一个元素和('(',')') –

+0

ohh我明白了'response.match(/.* \ [u'(。*)。*'\] /)[1] “这应该是我猜的诀窍,谢谢!:) – Amyth

2

其实您正则表达式是正确的,除了事实[ ]括号应该逃脱。

match功能为您提供了一个匹配的数组,你就必须去获得正确的:

var str="SomeError on example.com/register/\n[u'Some Error Message Here, That we want to parse'].\n\nSome more text here\nSome more text here"; 

var n = str.match(/.*\[u'(.*).*'\]/); 

​alert(n[1]);​ // Prints "Some Error Message Here, That we want to parse" 
1

首先,你需要逃避方括号。

match返回匹配数组,所以包装在圆括号中的值将位于此数组的索引1处。

response.match(/.*\[u'(.*)'\]/)[1] 

或者你可以尝试

/.*\[u'(.*)'\]/.exec(response)[1] 
1

这shoudl做到这一点。你的正则表达式是错误的BTW ...(你忘了逃跑的[]

<html> 
    <body> 

     <script type="text/javascript"> 
      var response= "[u'Some Error Message Here, That we want to parse']."; 

      if(response.match(/^.*\[u'.*'\].*$/)){ 
       var message = response.replace(/^.*\[u'/, ''); 
       var message = message.replace(/\'].*$/, ''); 
       document.write(message); 
      } 
      </script> 
    </body> 
</html>