我使用以下代码将数字和字符串替换为替换文本
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 apples
和Ten apples
?说一个来识别
(a number in digits or word)+space+(a case insensitive word)
并使用jQuery和php将其替换为10个橙色?
答案 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时间,但会涉及更多代码。