正则表达式替换数字(数字/单词)和单词

时间:2017-02-26 16:28:24

标签: php jquery regex

我使用以下代码将数字和字符串替换为替换文本

var rule = (\d+\s((apple\b|apples\b|Apple\b|Apples\b)+))
var search_regexp = new RegExp(rule, "ig");
return masterstring.replace(search_regexp,replacetext);
  • 输入字符串:10 apples are better than 100 pears
  • 替换:10 Oranges
  • 结果:10 Oranges are better than 100 pears

如何使用正则表达式来处理10 applesTen apples?说一个来识别

 (a number in digits or word)+space+(a case insensitive word) 

并使用jQuery和php将其替换为10个橙色?

1 个答案:

答案 0 :(得分:1)

如果您特别只想匹配有效数字'单词',则必须在您的正则表达式中包含您想要包含的所有数字。

(one|two|three|four|five|six|seven|eight|nine|ten)

这可以通过组合以相同字母开头的单词来改进:

(one|t(wo|hree|en)|f(our|ive)|s(ix|even)|eight|nine)

然后,您可以将\d+作为第一个选项:

(\d+|one|t(wo|hree|en)|f(our|ive)|s(ix|even)|eight|nine)

正如有些人在评论中所说,你使用的是不区分大小写的修饰符,所以我做了所有小写的情况)

请注意,如果你想要超过十年,这将变得相当长,并且难以提高效率,我已经快速前进,并且创造了一个正则表达式的野兽,我没有尝试过多优化..

(?:
  \d+
  |t(?:en|hirteen)
  |eleven
  |twelve
  |fifteen
  |(?:
    (?:twenty|thirty|fourty|fifty|sixty|seventy|eighty|ninety)
    (?:[ -](?:one|t(?:wo|hree)|f(?:our|ive)|s(?:ix|even)|eight|nine))?
  )
  |(?:one|t(?:wo|hree)|f(?:our(?:teen)?|ive)|s(?:ix|even)(?:teen)?|eight(?:een)?|nine(?:teen)?)
)[ ]apples?

我已经将它传播到几行并在在线示例中添加了'x'修饰符 - 这使得它更容易阅读,这适用于PHP但不适用于javascript,您必须删除要使用的换行符/空格在JS) [https://regex101.com/r/zDYme7/1](See在线工作示例)

还值得一提的是,在正则表达式中执行此操作可能不是最好的方法 - 字符串标记器会占用更少的CPU时间,但会涉及更多代码。

标记器的一个示例:https://www.npmjs.com/package/tokenize-text