首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex (不包括digit.digit)

Regex (不包括digit.digit)
EN

Stack Overflow用户
提问于 2015-10-07 10:48:48
回答 2查看 43关注 0票数 1

这是我运行正则表达式的示例文本:

代码语言:javascript
复制
DuraFlexHose Water 1/2" hex    300mm 30.00

我想把所有的东西都包括进去,然后停在30.00

因此,我的想法是类似于[^\d*\.\d*]*,但这是行不通的。有什么问题可以帮助我解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-07 11:27:12

请参阅演示

代码语言:javascript
复制
/.*(?=\d{2}\.\d{2})/
    .* matches any character (except newline)
        Quantifier: * Between zero and unlimited times, as many times as possible, giving back as needed [greedy]
    (?=\d{2}\.\d{2}) Positive Lookahead - Assert that the regex below can be matched
        \d{2} match a digit [0-9]
            Quantifier: {2} Exactly 2 times
        \. matches the character . literally
        \d{2} match a digit [0-9]
            Quantifier: {2} Exactly 2 times
票数 1
EN

Stack Overflow用户

发布于 2015-10-07 11:33:11

如果您不能使用任何CSV解析器,并且仅限于regex,我建议使用两个regexp。

这个可以用来抓取每个字符从一开始到第一个模式的optional spaces + digits(s) + . + digit(s)

代码语言:javascript
复制
^([\s\S]*?)\s*\d+\.\d+

请参阅演示

如果浮点值位于字符串的末尾,请使用$锚点(字符串的结尾):

代码语言:javascript
复制
^([\s\S]*?)\s*\d+\.\d+$

请参阅另一个演示

请注意,[\s\S]匹配任何符号,甚至是换行符。

Regex细分:

  • ^ -字符串的开始
  • ([\s\S]*?) -(捕获组1)任何符号,0或更多,否则尽可能少,330.45将被捕获)
  • \s* -0或更多的空白,尽可能多(以便修剪组1)
  • \d+\.\d+ -1或更多位数,后面跟着1位或更多位数的句点
  • $ -字符串的末端。

如果您计划匹配任何浮点数,如-.05,则需要用[+-]?\d*\.?\d+替换\d+\.\d+

以下是如何使用它:

代码语言:javascript
复制
var str = 'DuraFlexHose Water 1/2" hex    300mm 300.00';
var res = str.match(/^([\s\S]*?)\s*\d+\.\d+/); 
if (res !== null) {
    document.write(res[1]);
}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32990265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档