【问题标题】:Regex is not returning multiple matches [duplicate]正则表达式没有返回多个匹配项[重复]
【发布时间】:2020-11-19 14:32:41
【问题描述】:

这是我的正则表达式模式。

const dataPillRegex = /#\[dataPill\((.*)\)\]/g;

带有值(奇异匹配),它打印正确的数组, 但是对于 value2(多个匹配),它会返回错误的结果。

value = "Hi #[dataPill(salesforce.0.LastName)], ?"
const splitedValue2 = value2.split(dataPillRegex); //['Hi ', 'salesforce.0.LastName', ', ?']

value2 = "Hi #[dataPill(salesforce.0.LastName)], How is going #[dataPill(salesforce.0.FirstName)]?"
const splitedValue2 = value.split(dataPillRegex); 
//['Hi ', 'salesforce.0.LastName)], How is going #[dataPill(salesforce.0.FirstName', ', ?']

splitedValue2 应该是...

//['Hi ', 'salesforce.0.LastName', ', How is going ', 'salesforce.0.FirstName', ', ?']

此外,,,如果我想要拥有,,,那将是很棒的,,,

[
    'Hi ',
    '#[dataPill(salesforce.0.LastName)]',
    ', How is going ',
    '#[dataPill(salesforce.0.FirstName)]',
    '?'
]

【问题讨论】:

  • value 和 value2 有何不同?
  • 谢谢我刚刚编辑了帖子
  • 这可能是个超级难题
  • 让它不那么贪婪:/#\[dataPill\((.*?)\)\]/g;(添加'?')...也修复你的例子:splitedValue2 = value2.你可以使用 /./.exec() 方法来收集关于特定的比赛。
  • 我收到了["Hi ", "salesforce.0.LastName", ", How is going ", "salesforce.0.FirstName", "?"],在我看来,您正在寻找什么...

标签: javascript regex


【解决方案1】:

这是我的回答,来自您的重复问题。

var input = ”Hi #[dataPill(salesforce.0.LastName)], ?”;

const regex = new RegExp(/#\[dataPill\([A-Za-z0-9]+\.\d\.[a-zA-Z0-9]+\)\]/);

input = input.split(/(#\[dataPill\([A-Za-z0-9]+\.\d\.[a-zA-Z0-9]+\)\])/g);

output = [];

input.forEach(word => {
    temp = {
        value: word + “ “,
        matched: regex.test(word)
    };
    output.push(temp);
});

console.dir(output);

输出:

[
  {
    "value": "Hi  ",
    "matched": false
  },
  {
    "value": "#[dataPill(salesforce.0.LastName)] ",
    "matched": true
  },
  {
    "value": ", ? ",
    "matched": false
  }
]

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
  • 2021-10-12
  • 1970-01-01
  • 2020-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多