用正则按最后一个"_"分割"字符

想把pub_form_year_01分割为'pub_from_year'和'01'两部分,或者取得'pub_from_year'这个字段也可以,
分割的话很难按最后一个'_'分割吧?我是没办法了
所以想到提取pub_from_year,用了后向引用,(?=exp),我是这么写的'/(?=_\d)/i'
大家给出方法,谢谢了.
php中用的,感觉js中正则高手比较多,大家帮帮忙~~~呵呵

/(.+)_(.+)/.test("pub_form_year_01");
alert(RegExp.$1);
alert(RegExp.$2);

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

alert("pub_form_year_01".split(/_(?![^_]*_)/))

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

贪婪与懒惰
当正则表达式中包含能接受重复的量词(指定数量的代码,例如*,{5,12}等)时,通常的行为是匹配尽可能多的字符。考虑这个表达式:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。

有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的量词都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。现在看看懒惰版的例子吧:

a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab和ab。

表5.懒惰量词 *? 重复任意次,但尽可能少重复 
+? 重复1次或更多次,但尽可能少重复 
?? 重复0次或1次,但尽可能少重复 
{n,m}? 重复n到m次,但尽可能少重复 
{n,}? 重复n次以上,但尽可能少重复 
另外一种方法.

"pub_form_year_01".replace(/^(.*)\_([^\_]+)/,function(a,b,c){alert(b);alert(c)})

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

(0)

相关推荐

  • 用正则按最后一个"_"分割"字符

    想把pub_form_year_01分割为'pub_from_year'和'01'两部分,或者取得'pub_from_year'这个字段也可以, 分割的话很难按最后一个'_'分割吧?我是没办法了 所以想到提取pub_from_year,用了后向引用,(?=exp),我是这么写的'/(?=_\d)/i' 大家给出方法,谢谢了. php中用的,感觉js中正则高手比较多,大家帮帮忙~~~呵呵 /(.+)_(.+)/.test("pub_form_year_01"); alert(RegExp

  • 利用正则表达式判断一个给定的字符是否是回文

    如果给定的字符串是回文,返回true,反之,返回false. 如果一个字符串忽略标点符号.大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文). 注意你需要去掉字符串多余的标点符号和空格,然后把字符串转化成小写来验证此字符串是否为回文. 函数参数的值可以为"racecar","RaceCar"和"race CAR". 关键代码: 去掉字符串中的标点符号和空白格.可以用str.replace()+正则表达式匹配. v

  • python 使用正则表达式按照多个空格分割字符的实例

    程序代码如下 import os import re os.system("nmap -sP 192.168.3.0/24") //扫描IP mac = os.popen("cat /proc/net/arp ").readlines() //按行读取 length = len(mac) for i in range(1,length): b= re.split(r" +",mac[i]) //按照多个空格分割 if(b[2]=='0x2'):

  • python 巧用正则寻找字符串中的特定字符的位置方法

    假定字符串为: 小明买冰棍花了5元,买糖果花了3元,买游戏花了59元,小明今天一共花了67元. 要找到字符串中所有"元"所在的位置,只需几行代码即可搞定. import re str=u'小明买冰棍花了5元,买糖果花了3元,买游戏花了59元,小明今天一共花了67元.' word = u'元' a = [m.start() for m in re.finditer(word, str)] print a 结果为 [8, 16, 25, 37],说明"元"出现的位置在第

  • 如何使用正则匹配最后一个字符串详解

    前几天遇到一个需求,输入的是 <user> <user> <name>a</name> </user> <user> <name>a</name> </user> </user> <password>123</password> 要求拿到 <user> <user> <name>a</name> </user&

  • mybatis分割字符串并循环,实现in多个参数的操作

    mybatis分割字符串并循环,实现in多个参数 mybatis xml代码: <select id="selectInXh" resultMap="BaseResultMap" parameterType="java.lang.String"> select * from carinfo where xh in <if test="param1 != null and param1 != ''"> &

  • MYSQL 一个巧用字符函数做数据筛选的题

    问题描述: 结构: test 有两个字段, 分别是col1和col2,都是字符字段, 里面的内容都是用,号分隔的三个数字,并且是一一对应的, 比如col1内容是:26,59,6 col2内容是:1502.5,1690,2276.77 一一对应就是26的值是1502.5,59是1690,6对应2276.77 搜索条件: 选择一个id,比如选择59,再输入一个数字,比如:2000 然后就是搜索col1中存在id=59的记录,然后搜索col2小于2000,即1690<2000 举例: 如有以下三条记录

  • PHP中将一个字符串部分字符用星号*替代隐藏的实现代码

    有时候我们在开发中会遇到这样一种情况,例如:显示手机号我们需要将中间4位遮挡掉,一般使用"*"号代替,或是显示身份证号码是为了保护个人信息也同样需要遮挡掉4位,故可用到下列方式.代码进行实现: 核心代码 <?php /** +---------------------------------------------------------- * 将一个字符串部分字符用*替代隐藏 +--------------------------------------------------

  • 一个匹配重复字符正规表达式

    前几天做邮件地址过滤,要求把连续重复多次的邮件地址删除,试了很多次,才试出了这个正规表达式. /([a-z0-9A-Z])\1{2,}/ 匹配3个或以上的重复字符,比如aaaa,bbb,cccc,000 /[a-z0-9A-Z]{3,}/ 匹配3个或以上的字符,比如abc,ab34

  • pandas 如何分割字符的实现方法

    摘要:本文主要是在pandas中如何对字符串进行切分.我们考虑一下下面的应用场景. 这个是我们的数据集(data),可以看到,数据集中某一列(name)是某个行业的分类.各个行业之间用符号 '|'分割.我们要把用每个'|'进行分割的内容抽取出来.pandas有个一步到到位的方法,非常方便. import pandas as pd data['name'].str.split('|',expand=True) 关键是参数expand,这个参数取True时,会把切割出来的内容当做一列. 如果不需要p

随机推荐