我似乎让很多人对这个问题感到困惑,所以让我尽可能简单地陈述我想做的事情。
我想在文本字符串中搜索以“mak”,“mind”和“mass”开头的单词,并以“e”或“er”结尾。那将是“mak”,“make”,“maker”,“mind”,“minde”,“minder”,“mass”,“masse”,“masser”。
我试图匹配文本中的某些单词,如果它们以特定字母开头并以特定字母结尾。我正在使用以下正则表达式:
aray = ['mak','mind', 'mass'];
for(i=0; i < aray.length; i++){
searchTerm = new RegExp(
"\\b" + aray[i] + "\\b|" +
"\\b" + aray[i] + "en\\b|" +
"\\b" + aray[i] + "er\\b");
word = testText.match(searchTerm, "gi");
}
问题是当第一个实例匹配时,不会搜索其他实例。有人能指出我正确的方向。任何帮助将不胜感激。
此问题已被标记为重复,但另一个问题并未回答我遇到困难的问题。
答案 0 :(得分:0)
每次执行searchTerm = new RegExp(...);
时都会重新创建正则表达式,所以它只会匹配最后一个单词,除非你在循环中使用你声称自己的表达式,但它不会看起来像。我仍然只猜测你想要什么,但如果你想构建一个匹配所有单词的正则表达式,你需要将所有单词放在一个与|
结合的表达式中。
此外,必须将gi
之类的标志传递给RegExp构造函数,而不是match
方法。
var array = ['mak', 'mind', 'mass'];
var searchTerm = new RegExp('\\b(' + array.join('|') + ')(e|er)?\\b', 'gi');
var match = testText.match(searchTerm);
答案 1 :(得分:0)
searchTerm = new RegExp("\\b(?:" + aray[i] + ")(?:er|e)?\\b");
The Regex is: \b(?:mak)(?:er|e)?\b It consists of: \b... Word Boundary Two non-capturing groups (?:) ==> Basically a group which cannot be addressed inside the regex. The first non-capturing group matches the beginning of the word. (?:mak) ==> mak is a placeholder for an entry of the array. The second non-capturing group matches the ending of the word. (?:er|e)? The pipe character is an OR. So this part matches er or e. It is necessary to write er before e ==> if switched the regex engine would not find words ending with er. The ? at the end means find zero or exact one times and enables finding the beginning without an (er or e ) too.