正则表达式找到模式并保持Javascript

时间:2018-05-08 10:15:50

标签: javascript regex

我必须在字符串中找到一个模式,并且只有在模式匹配时才保留中间部分。

模式如下:

(空格)(↳)(空格)(任何字符,数字符号等)(空格)( - )(空格)(货币符号,可以是£等)(1或多位数字)(。)(2)位)

↳加牛奶 - £0.25

如果模式匹配我想保留(任何字符,数字符号等)并丢弃其他所有内容。

有可能吗?

1 个答案:

答案 0 :(得分:1)

\s↳\s(.+)\s-\s([\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6]\d+\.\d{2})应该有效。中间长而可怕的部分是找到货币符号,取自this answer

一块一块:

  • \s匹配空格字符
  • 完全匹配该字符
  • \s匹配空格字符
  • (.*)是您的第一个捕获组,捕获所有内容,直到匹配正则表达式的下一部分。 .*表示任何字符,无论多少次。
  • \s-\s匹配一个空格,后跟一个破折号和另一个空格
  • ([\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6]\d+\.\d{2})抓住货币和数字:
    • [\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6]匹配货币字符
    • \d+\.\d{2}匹配一个或多个数字,后跟一个句号和两个​​以上的数字

在上下文中:

let regex = /\s↳\s(.+)\s-\s([\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6]\d+\.\d{2})/;

let testText = " ↳ Add milk - £0.25";
let matches = regex.exec(testText);

console.log("Test text = \"" + matches[0] + "\"");
console.log(matches[1]);
console.log(matches[2]);

如果您只想匹配几种货币,比如说£$,那么您的生活会更轻松,而且正则表达式看起来会更难看。