2015-02-06 111 views
0

我对于正则表达式很新,但我试图在我的匹配中使用一个变量。使用带有.match的变量的JavaScript正则表达式

所以我有一个字符串,它是“总计:$ 168” 我试图让数量,168

所以我有这样的:

totalCost = totalCost.match(/[^Total: $]*$/); 

当我回显出来我得到168. 这是工作,这是我想要的。

但是现在我想更进一步,想让“Total:$”变量,所以我可以很容易地设置它并使之成为模块化。

所以我做

var stringToSearch = 'Total: $'; 

,然后做

totalCost = totalCost.match(/[^stringToSearch]*$/); 

我做的控制台日志:

console.log(totalCost+" || "+stringToSearch); 

,我也得到:

l: $168 || Total: $ 

为什么当我使这个变量表现出所有奇怪?

+1

您是否知道,'[^ stringToSearch]'表示任何字符,它不是由[位于[否定字符类](http://www.regular-expressions.info/)中的'stringToSearch'组成] charclass.html#否定))。如果你只想在最后使用'\ d + $'或'[0-9] + $'' – 2015-02-06 23:15:05

+0

'来匹配数字,你的问题很难理解。 totalCost = totalCost.match(/ [^ Total:$] * $ /)时,'totalCost'的值是多少?''?这将是很好,有一块评论代码解释你在做什么... – 2015-02-06 23:25:12

回答

1

看起来你can't interpolate into a JavaScript regex/[^stringToSearch]*$/将匹配以字符串"stringToSearch"以外的字符结尾的任何子字符串。如果你想成为模块化的,您可以使用RegExp构造:

totalCost = totalCost.match(new RegExp("[^" + stringToSearch + "]*$")); 
+0

正是我在找什么。希望我知道RegExp的存在。我想知道是否有一个函数将字符串转换为正则表达式,所以我可以将它弹出到匹配中,但找不到一个。谢谢。 – Travis 2015-02-06 23:28:08

2

这是纯粹的运气,你的正则表达式工作返回"120"

[^Total: $]*$告诉正则表达式解析器其它比括号[ .. ]( 'T' 之间的字符匹配任何, 'O', 'T', '一个', '升',””,或'$'),尽可能多次直到行尾($不是本例中的字面'$'字符)。那么它匹配了什么?字符类别中仅有的字符:'1','2','0'。

你所试图做的是文字串后捕获匹配的号码“总计:$”:

var totalCost = 'Total: $168', 
    matches = totalCost.match(/^Total: \$([\d\.]*)/), 
    totalCostNum = matches ? parseFloat(matches[1]) : 0; 

要作出这样的变量,你需要先逃生您的变量,以便文本可以从字面上进行匹配,然后用new RegExp建立自己的正则表达式:

var totalCost = 'Total: $168', 
    stringToMatch = 'Total: $', 
    stringToMatchEscaped = stringToMatch.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), 
    stringToMatchRegEx = new RegExp(stringToMatchEscaped + /([\d\.]*)/.source), 
    matches = totalCost.match(stringToMatchRegEx), 
    totalCostNum = matches ? parseFloat(matches[1]) : 0; 
1

这听起来像你想使你的正则表达式,你可以在不同的输入使用的变量。尝试这样的:

var regex = /^Total: \$(\d+)/; 
regex.exec('Total: $168'); 
// [ 'Total: $168', '168', index: 0, input: 'Total: $168' ] 
regex.exec('Total: $123'); 
// [ 'Total: $123', '123', index: 0, input: 'Total: $123' ] 

也有一些问题与你的正则表达式的逻辑,我已经改变了我的例子。它不符合你的期望。