这是我运行正则表达式的示例文本:
DuraFlexHose Water 1/2" hex 300mm 30.00我想把所有的东西都包括进去,然后停在30.00
因此,我的想法是类似于[^\d*\.\d*]*,但这是行不通的。有什么问题可以帮助我解决这个问题?
发布于 2015-10-07 11:27:12
请参阅演示
/.*(?=\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发布于 2015-10-07 11:33:11
如果您不能使用任何CSV解析器,并且仅限于regex,我建议使用两个regexp。
这个可以用来抓取每个字符从一开始到第一个模式的optional spaces + digits(s) + . + digit(s)。
^([\s\S]*?)\s*\d+\.\d+请参阅演示
如果浮点值位于字符串的末尾,请使用$锚点(字符串的结尾):
^([\s\S]*?)\s*\d+\.\d+$请参阅另一个演示
请注意,[\s\S]匹配任何符号,甚至是换行符。
Regex细分:
^ -字符串的开始([\s\S]*?) -(捕获组1)任何符号,0或更多,否则尽可能少,3从30.45将被捕获)\s* -0或更多的空白,尽可能多(以便修剪组1)\d+\.\d+ -1或更多位数,后面跟着1位或更多位数的句点$ -字符串的末端。如果您计划匹配任何浮点数,如-.05,则需要用[+-]?\d*\.?\d+替换\d+\.\d+。
以下是如何使用它:
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]);
}
https://stackoverflow.com/questions/32990265
复制相似问题