无法弄清楚这个正则表达式

时间:2018-03-22 22:52:42

标签: javascript regex

我正在创建一个应该运行此列表的正则表达式并返回以下值。

['-- /\ 11.5', '- /\ 11.5', '    x-small', '-- x-small', 'us 8.5']

期望的输出:

['11.5', '11.5', 'x-small', 'x-small', 'us 8.5']

我正在使用的正则表达式:

let testRe = /(?!-)[a-zA-Z0-9\.\-]+/

我得到的输出:

['11.5', '11.5', 'x-small', 'x-small', 'us']

正如您所看到的,问题在于让我们和8.5之间的空间返回。我已经尝试了很多不同的正则表达式,但我似乎无法得到一个可以与其他人一起工作的。

我基本上需要一个正则表达式:从字符串中的第一个数字/字母开始,在第一个和最后一个数字/字母之间拾取任何内容,然后返回它。

感谢您的任何见解

2 个答案:

答案 0 :(得分:2)

你可以试试这个:

([a-zA-Z0-9.][a-zA-Z0-9.\- ]*[a-zA-Z0-9.\-])

Demo

说明:

  • [a-zA-Z0-9.]匹配应该位于我们要查找的子字符串开头的字母数字或点
  • [a-zA-Z0-9.\- ]*还匹配短划线-和空格(因为两者都在子字符串中允许)。它可以重复。
  • [a-zA-Z0-9.\-]最后允许的字母可以是字母,数字或点。在最后使用它限制了内部重复的范围,并确保我们匹配直到最后允许的字符。

答案 1 :(得分:0)

从您的示例输入中可以看出,您正在从字符串的左侧修剪不需要的字符。因此,您只能在遇到第一个字母或数字后开始匹配。 (如果这个逻辑不适用于您的所有用例,请在您的问题中提供更多违反此规则的示例。)

Pattern Demo

Javascript演示:

let array = ['-- /\ 11.5', '- /\ 11.5', '    x-small', '-- x-small', 'us 8.5'];
let reTest = /[a-z\d].*/i;
for (var i=0, len=array.length; i<len; ++i) {
    document.write(array[i].match(reTest)+"<br>");
}