正则表达式匹配单词,可能有也可能没有前缀和后缀

时间:2018-03-14 22:22:00

标签: javascript regex

这些是我的输入:

ab_something#123
something else#15
zy_s0meth1ng third
nothing

我需要的输出是:

something
something else
s0meth1ng third
nothing

我得到的最接近的是(?:.._|^)(.*)(?:#[0-9]*|$),但这仍然会捕获后缀。

3 个答案:

答案 0 :(得分:0)

试试这个:^(?:.*_)*(.*?)(?:#[0-9]*)*$

基于我使用的正则表达式测试程序,此模式捕获了第4组中所需的字符串,用于您的四个示例。

我改变的事情:

  1. 将开始和结束锚点移动到非捕获组之外 确保它们始终匹配。
  2. 在前缀/后缀上使用* 如果字符串中有多个前缀/后缀,则为模式。
  3. 在中间模式上使用延迟量词(*?)来确保这一点 它不会在后缀组获得后缀之前获取后缀。

答案 1 :(得分:0)

/^(.{2}_)?([^#]+)(.\d+)*$/

我的一个朋友最终帮助了我。

基本上:

(.{2}_)?匹配出现0或1次的前缀

([^#]+)匹配中间部分,直到#

(.\d+)*$匹配#及其后的所有数字

答案 2 :(得分:0)

试试这个:



var str = ["ab_something#123",
  "something else#15",
  "zy_s0meth1ng third",
  "nothing"
];


for (var i = 0; i < str.length; i++) {
  str[i] = str[i].replace(/(^[a-zA-Z]+_|#[0-9]+$)/g, '');
}
console.log(str);
&#13;
&#13;
&#13;