正则表达式:读取数字背后的字符

时间:2010-10-07 02:55:41

标签: javascript regex object

我有正则表达式代码:

<script type="text/javascript">
     var str = "kw-xr55und";
     var patt1 = /[T|EE|EJU].*D/i;
     document.write(str.match(patt1));
</script>

它可以读取:

str= "KD-R55UND" -> as UND

但如果我输入:

 str= "kw-tc800h2und ->  result tc-800h2und.  //it makes script read T in front of 800
 i want the result as UND 

如何让代码只检查800后面的字符?

修改

在此代码之后,它可以工作:

<script type="text/javascript">
var str = "kw-tc800h2und";
var patt1 = /[EJTUG|]\D*D/i;
document.write(str.match(patt1));
</script>

但显示下一个问题,我可以在以下情况下显示结果:

str= "kw-tc800un2d"

i want result like -> UN2D

4 个答案:

答案 0 :(得分:1)

对于PCRE,请尝试:

/(?<=\d)\D*/

它使用lookbehind来查找紧跟在数字后面的一组非数字字符。

对于Javascript,试试这个:

/\D+$/

它将匹配文本末尾不是数字的任何字符。

答案 1 :(得分:1)

试试这个:

 var patt1 = /(T|EE|EJU)\D*$/i;

它将匹配以TEEEJU开头的一系列非数字字符,并在字符串末尾结束。如果字符串必须以示例中的D结尾,则可以将其添加到:

 var patt1 = /(T|EE|EJU)\D*D$/i;

如果你想在任何地方匹配它,而不仅仅是在字符串的末尾,请尝试:

 var patt1 = /(T|EE|EJU)\D*D/i;
编辑:哎呀!不,当然这不起作用。我试着猜测[T|EE|EJU]你的意思,因为它是一个匹配一个字符EJT的字符类, U|(相当于[EJTU|]),我确信这不是您的意思。但到底是什么,试试这个:

 var patt1 = /[EJTU|]\D*D/i;

我仍然不明白你要做什么,但有时候反复试验是前进的唯一方法。至少我这次测试了! :P

编辑:好的,所以匹配可以包含数字,它不能以一个开头。试试这个:

var patt1 = /[EJTU|]\w*D/i;

答案 2 :(得分:0)

如果/[TEUJ]\D*\d*\D*D$/i中有1位数字,请尝试tc800h2und,而不是2.获取更具体的内容需要其他信息,例如字符串的最大长度,或解析{{1}之间的确切差异}和h2und

答案 3 :(得分:0)

根据您正在使用的正则表达式的风格,您可以使用后面的断言。它基本上会说“如果它正好在一个数字之后匹配它。”

在python中就是这样:

(?<=\d)\D*

哦,同样,正则表达式区分大小写,除非你设置它不是。