我正在用Javascript编写一个整数解析器,它接受数字高达一百万的口头描述。目前,我需要在var orderItems = new List<OrderItem>(){...};
var result=
from a in orderItems
join b in db.Orders on new { a.field1, a.field2 } equals new { b.field1, b.field2 }
select new { B = b };
之类的字符串中删除(space)thousand
,最好使用包含two hundred forty-two thousand
的捕获组。我的问题是,two hundred forty-two
可能存在也可能不存在,并且在这种情况下使用thousand
会阻止我的正则表达式按预期工作。这是我到目前为止所得到的:
考虑字符串?
two hundred forty-two thousand
第一个捕获组包含(.* ?)( thousand)
,但如果字符串不以two hundred forty-two
thousand
在字符串中没有(.* ?)( thousand)?
的情况下工作,但第一个捕获组始终产生整个字符串我需要的是一个表达式,它将整个字符串放在一个捕获组中,除了最后一个指定的单词,它是否存在于字符串中。
我一直在寻找解决这个问题的方法,但我找不到任何地方在字符串中排除的字是可选的
答案 0 :(得分:1)
您可以创建一个非捕获组以匹配thousand
模式并丢弃它(如果存在),如果不存在,则替换将匹配到行尾。
我可以拿出这个正则表达式:
(.+?)(?: thousand|$)
<强> Working demo 强>
答案 1 :(得分:1)
var re = /^(.*?)( thousand)?$/;
console.log("two hundred forty-two thousand".match(re));
console.log("two hundred forty-two".match(re));
.*?
懒惰(即非贪婪)与可选thousand
匹配。