首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用带有JavaScript表达式的变量的.match

使用带有JavaScript表达式的变量的.match
EN

Stack Overflow用户
提问于 2015-02-06 23:00:10
回答 3查看 232关注 0票数 0

我对regex非常陌生,但我试图在我的匹配中使用一个变量。

所以我有一个字符串,是“总计:$ 168”,我试图得到这个数字,168。

所以我有这个:

代码语言:javascript
复制
totalCost = totalCost.match(/[^Total: $]*$/);

当我回音的时候我得到了168。这很管用,这就是我想要的。

但是现在我想更进一步,想让"Total:$“成为一个变量,这样我就可以轻松地设置它,并使这个模块化。

所以我做了

代码语言:javascript
复制
 var stringToSearch = 'Total: $';

然后做了

代码语言:javascript
复制
 totalCost = totalCost.match(/[^stringToSearch]*$/);

我做了一个控制台日志:

代码语言:javascript
复制
 console.log(totalCost+" || "+stringToSearch );

我得到了:

代码语言:javascript
复制
l: $168 || Total: $

为什么当我做这个变量时,它的行为都很奇怪?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-06 23:17:00

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

代码语言:javascript
复制
totalCost = totalCost.match(new RegExp("[^" + stringToSearch + "]*$"));
票数 1
EN

Stack Overflow用户

发布于 2015-02-06 23:07:47

您的正则表达式返回"120"是纯粹的运气!

[^Total: $]*$告诉regex解析器匹配括号[.] (‘T’、'o‘、't’、'a‘、'l’、‘’或'$‘之间的字符以外的任何字符,在行尾之前尽可能多地匹配(在本例中,$不是字面上的’$‘字符)。那么它匹配了什么?唯一在字符类之外的字符是:'1','2','0‘。

您想要做的是在文字字符串“Total:$”之后捕获匹配的数字:

代码语言:javascript
复制
var totalCost = 'Total: $168',
    matches = totalCost.match(/^Total: \$([\d\.]*)/),
    totalCostNum = matches ? parseFloat(matches[1]) : 0;

要创建该变量,您需要首先转义变量,这样文本才能按字面顺序匹配,然后使用new RegExp构建正则表达式:

代码语言:javascript
复制
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;
票数 2
EN

Stack Overflow用户

发布于 2015-02-06 23:19:40

听起来,您希望将正则表达式变成一个变量,您可以在不同的输入上使用它。试着做这样的事情:

代码语言:javascript
复制
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' ]

你的正则表达式的逻辑也有一些问题,我在我的例子中做了修改。不像你想的那样匹配。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28376287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档