我对regex非常陌生,但我试图在我的匹配中使用一个变量。
所以我有一个字符串,是“总计:$ 168”,我试图得到这个数字,168。
所以我有这个:
totalCost = totalCost.match(/[^Total: $]*$/);当我回音的时候我得到了168。这很管用,这就是我想要的。
但是现在我想更进一步,想让"Total:$“成为一个变量,这样我就可以轻松地设置它,并使这个模块化。
所以我做了
var stringToSearch = 'Total: $';然后做了
totalCost = totalCost.match(/[^stringToSearch]*$/);我做了一个控制台日志:
console.log(totalCost+" || "+stringToSearch );我得到了:
l: $168 || Total: $为什么当我做这个变量时,它的行为都很奇怪?
发布于 2015-02-06 23:17:00
看上去像你can't interpolate into a JavaScript regex。/[^stringToSearch]*$/将匹配任何以文字字符串"stringToSearch"中的字符以外的字符结尾的子字符串。如果您想要模块化,可以使用RegExp构造函数:
totalCost = totalCost.match(new RegExp("[^" + stringToSearch + "]*$"));发布于 2015-02-06 23:07:47
您的正则表达式返回"120"是纯粹的运气!
[^Total: $]*$告诉regex解析器匹配括号[.] (‘T’、'o‘、't’、'a‘、'l’、‘’或'$‘之间的字符以外的任何字符,在行尾之前尽可能多地匹配(在本例中,$不是字面上的’$‘字符)。那么它匹配了什么?唯一在字符类之外的字符是:'1','2','0‘。
您想要做的是在文字字符串“Total:$”之后捕获匹配的数字:
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;发布于 2015-02-06 23:19:40
听起来,您希望将正则表达式变成一个变量,您可以在不同的输入上使用它。试着做这样的事情:
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' ]你的正则表达式的逻辑也有一些问题,我在我的例子中做了修改。不像你想的那样匹配。
https://stackoverflow.com/questions/28376287
复制相似问题