javascript正则表达式浮点数,以字符串结尾
javascript regex float number which ends with string
学习正则表达式,但这一个让我头疼。我需要匹配一个浮点数(以.
或,
作为小数点),它必须以以下字符结尾:€/g
。
有效的匹配应该是例如:
40€/g
43.33€/g
40,2€/g
40.2€/g
38.943€/g
感谢帮助。。
正则表达式看起来像:
'd+(?:[.,]'d+)?€/g
在Javascript中,作为regex对象(注意,需要转义正斜杠):
/'d+(?:[.,]'d+)?€'/g/
以下是每个部分的工作分解:
'd+ # one or more digits
(?: # ... don't capture this group separately
[.,] # decimal point
'd+ # one or more digits
)? # make the group optional
€/g # fixed string to match
如果你想让.123欧元/克这样的东西也有效,你可以使用:
(?=[.,]|'d)(?:'d+)?(?:[.,]'d+)?€/g
也就是说,这两组数字都是可选的,但必须至少有一个(这使用了前瞻性,这有点棘手)。
请注意,这也将匹配像"word2€/g"这样的结构。如果要防止这种情况,请以(?<=^|'s)
(如果前面有空格或字符串开头,则匹配)开头regex,然后以(?=$|'s)
(如果后面有空格或串尾,则匹配匹配)结尾。
全吹版:
(?<=^|'s)(?=[.,]|'d)(?:'d+)?(?:[.,]'d+)?€/g(?=$|'s)
'd+([.,]'d+)?€/g
我想应该行得通。
你真的确定你需要一个正则表达式吗?相反,利用内置的浮点解析可能更容易:取欧元符号之前的任何内容,将逗号标准化为小数(反之亦然,最终有效的内容),然后尝试使用Number
函数进行解析。请注意,您需要检查转换是否使用Number.isNaN函数。
另一种可能性是只使用parseFloat函数。由于它忽略了数字后面的任何字符,因此它将把"40€
解析为40.0
。然而,它可能不是您想要的,因为它还允许"40a"
和"40b"
之类的东西。
相关文章:
- 创建属性值数组,其中属性名称以特定字符串结尾
- 如何删除字符串开头和结尾的换行符
- 用于删除字符串中字符开头到结尾的正则表达式
- 从结尾或开头修剪字符串
- 正则表达式能否匹配字符串开头或结尾的字符(但不能同时匹配)
- 将一个字母结尾到特定字符串的末尾
- 如何从以某个单词(regexp)结尾的字符串中获取id
- javascript正则表达式浮点数,以字符串结尾
- 在字符串的开头和结尾搜索相同的数字
- 如何编写RegExpression For在javascript中不允许在字符串中使用前导和结尾空格
- 正则表达式 - 字符串不能以空格开头,以空格结尾,并且连续包含几个空格
- 在字符串的开头和结尾添加一个字符
- JavaScript WebSocket 非以 null 结尾的字符串
- 将特定字符串的结尾从模式的末端剥离
- 如何选择以字符串开头但没有't在jQuery中以不同的字符串结尾
- 匹配以特定字符串开头并以特定字符串结尾的字符串的内容
- JavaScript RegEx字符串结尾不起作用
- 字符串的正则表达式,这些字符串不以指定的子字符串结尾
- 正则表达式查找字符串结尾
- 正则表达式匹配不以特定字符串结尾的组