Javascript 变量字符串的正则表达式
我有一些字符串,我想从中提取数字。字符串可以有多种格式,例如:Javascript 变量字符串的正则表达式,javascript,regex,Javascript,Regex,我有一些字符串,我想从中提取数字。字符串可以有多种格式,例如: 机翼上的某物$(0.55)$0.75$(0.10) 我希望捕获这些组,以便最终结果是: 机翼上的东西 (0.55) 0.75 (0.10) 我永远不知道是否会有一个“$”,或者数字是否会是十进制,或者需要捕获多少个数字(例如,在本例中有3个数字,但可能有4个)。现在我有([\w\s]*)([\w\d]*),它捕获字符串和值: 机翼上的东西 $(0.55)$0.75$(0.10) 但似乎无法解析单个值。我应该进行拆分 alert('
机翼上的某物$(0.55)$0.75$(0.10)
我希望捕获这些组,以便最终结果是:
([\w\s]*)([\w\d]*)
,它捕获字符串和值:
alert('something on the wing$(0.55)$0.75$(0.10)”。拆分(/\s*\$\s*/)
我应该进行拆分
警报(“机翼上的某物$(0.55)$0.75$(0.10)”.split(/\s*\$\s*/)
您可以使用以下正则表达式split
:
/\s*\$?(\(?\d*\.?\d+\)?)\s*/
火柴
-可选的\$?
(因为它可能存在或不存在,但我们需要将其从结果中排除)$
-第1组(捕获的值输出到结果数组中,并使用(\(?\d*\。\d+\)?)
)在可选括号内匹配浮点值:拆分
-可选的\(?
(
-零位或更多位\d*
-可选的\.?
-1+位\d+
-可选的\)?
)
-将匹配零个或多个空格(以便不修剪结果数组的元素)\s*
var re=/\s*\$(\(?\d*\.?\d+\)?)\s*/;
var str=‘机翼上的某物$(0.55)$0.75$(0.10)’;
var res=str.split(re).filter(布尔);/。过滤器(布尔值)将删除空值
document.body.innerHTML=“+JSON.stringify(res,0,4)+”代码>您可以使用以下正则表达式拆分代码:
/\s*\$?(\(?\d*\.?\d+\)?)\s*/
^[\w\s]+|[\d\.()]+?(?=\s|$)
火柴
\$?
-可选的$
(因为它可能存在或不存在,但我们需要将其从结果中排除)
(\(?\d*\。\d+\)?)
-第1组(捕获的值输出到结果数组中,并使用拆分
)在可选括号内匹配浮点值:
\(?
-可选的(
\d*
-零位或更多位
\.?
-可选的
\d+
-1+位
\)?
-可选的)
\s*
-将匹配零个或多个空格(以便不修剪结果数组的元素)
请参阅JS演示:
var re=/\s*\$(\(?\d*\.?\d+\)?)\s*/;
var str=‘机翼上的某物$(0.55)$0.75$(0.10)’;
var res=str.split(re).filter(布尔);/。过滤器(布尔值)将删除空值
document.body.innerHTML=“+JSON.stringify(res,0,4)+”代码>即使没有任何捕获,这也很可能按照您想要的方式完成工作。由于没有捕获括号,它将捕获句子后面的尽可能多的数据,并以数组的形式返回
^[\w\s]+|[\d\.()]+?(?=\s|$)
var r=/^[\w\s]+|[\d\.()]+?(?=\s |$)/g,
s=“机翼上的某物$(0.55)$0.75$(0.10)$12.75€(4.25)”,
m=s.match(r);
document.write(“+JSON.stringify(m,null,2)+”)代码>即使没有任何捕获,这也很可能按照您想要的方式完成工作。由于没有捕获括号,它将捕获句子后面的尽可能多的数据,并以数组的形式返回
var r=/^[\w\s]+|[\d\.()]+?(?=\s |$)/g,
s=“机翼上的某物$(0.55)$0.75$(0.10)$12.75€(4.25)”,
m=s.match(r);
document.write(“+JSON.stringify(m,null,2)+”)
我永远不知道是否会有一个“$”或者我需要捕获多少值。
@ritesht93然后他必须提供一个例子来说明这种情况。@AvinashRaj:如果用一种明确的方式陈述,一个例子是多余的。很明显,OP需要可选括号中的数字以及它们周围的内容。那么,为什么他想要翅膀上的东西?我不是心理媒介/心理主义者:)让OP解释一下。我永远不知道是否会有一个“$”或者需要捕获多少值。
@ritesht93然后他必须提供一个例子case.@AvinashRaj:如果以明确的方式陈述,那么示例是多余的。很明显,OP需要可选括号中的数字以及它们周围的内容。那么,为什么他想要翅膀上的东西
?我不是心理媒介/心理主义者:)让OP解释一下。我永远不知道是否会有一个“$”或者需要捕获多少值代码>,不清楚..我永远不知道是否会有“$”或需要捕获多少值代码>,不清楚..如果我想让十进制成为可选的,它会是/\s*\$?(\(?\d*(\)?\d+\)\s*/
?@Jeff不,它是\d+(?:\。\d+)
所以,我添加了\,?
来允许逗号,但这会使它在带有2+逗号的数字上分崩离析(即123456789)。我将正则表达式更改为/\s*\$?(\(?\d*[,]?\d+\)?)\s*/g
,但这不起作用。我假设是因为这个模式假设一组数字在前面,一组在后面。如何指定数字/逗号的模式可以出现多次?具有可选数字分组符号的数字的模式是(?:\d{1,3}(?:,\d{3})*\d*)(?:\。\d+)(?:\。\d+)
如果我想使十进制成为可选的,它只是/\s*\$(\(?\d*(\)\d+\))\s*/
?@Jeff no,它是\d+(?:\)。\d+),
,所以,我添加了,?
也允许使用逗号,但这会使它在带有2+逗号的数字(即123456789)上分崩离析。我将正则表达式改为