【问题标题】:reactStringReplace() inconsistent regex matchreactStringReplace() 不一致的正则表达式匹配
【发布时间】:2018-09-26 17:02:55
【问题描述】:

我正在尝试使用 react-string-replace 来匹配文本字符串中的所有 $Symbols。

以下是我们希望匹配的一些示例值(股票/加密货币/外汇对):$GPRO、$AMBA、$BTC/USD、$LTC/ETH

这是我们尝试的正则表达式

/\$\S+[^\s]*/g

传递字符串时

$this 很好用 $this/也很好用。

通过.match() - 在数组中返回正确的符号。

0: "$this"
1: "$this/works"

使用时

reactStringReplace() - 每个匹配项都返回

works great

任何想法为什么

reactStringReplace()

似乎没有正确处理这个正则表达式?

谢谢你!

【问题讨论】:

  • 请显示您正在使用的实际代码。理想情况下,创建一个minimal reproducible example。编辑:添加括号以获取比赛:codesandbox.io/s/6v9vorn33w
  • 你知道\S[^\s] 是一样的吧?
  • @chrisg 非常感谢 ???? p.s.抱歉,缺少可用信息,我会考虑到这一点

标签: javascript regex reactjs match


【解决方案1】:

查看React String Replace documentation,那里写着:

reactStringReplace(string, match, func)
...
匹配
类型:regexp|string

您要在string 中替换的字符串或正则表达式。请注意,在使用 RegExp 时,您必须包含一个匹配组。

为什么要添加捕获组?请参阅replaceString 函数。有var result = str.split(re); 行使用该模式实际拆分您使用模式传递给正则表达式的内容,从而标记整个输入匹配的部分和不匹配您的正则表达式的部分。

如果您不向作为 String 传递的正则表达式添加组,则捕获括号将为 added automatically around the whole pattern:

if (!isRegExp(re)) {
    re = new RegExp('(' + escapeRegExp(re) + ')', 'gi');
}

如果您将正则表达式作为 RegExp 传递而不捕获括号,则结果数组中将丢失匹配项,因此它们将消失。

所以,使用

/(\$\S+)/g

如果你想在输出中保留$ 字符,或者

/\$(\S+)/g

如果你想省略美元。

【讨论】:

    猜你喜欢
    • 2020-11-06
    • 2019-07-11
    • 1970-01-01
    • 2021-02-01
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多