正则表达式分别匹配2个字母

时间:2014-12-03 11:06:47

标签: jquery regex

我有一个单词列表:

Sup
Past
P.S. Away
Test
Set
Lapse
Space

现在,当我输入ps时,我需要匹配包含一次" p"的所有单词。和" s"在这个词中。 所以输出将是:

Sup
Past
P.S. Away
Lapse
Space

Regexes尝试:

/ps/ // checks for ps as a combination 
/p{1}.s{1}/ // Selects the needful but not sup or space  (s preceding p)

4 个答案:

答案 0 :(得分:2)

像这样使用正面展望

/^(?=.*p)(?=.*s).*$/mi

Regex Example

  • ^将正则表达式锚定在字符串的开头

  • (?=.*p)正面向前看。检查字符串是否包含p

  • (?=.*s)正面向前看。检查字符串是否包含s

  • .*匹配任何内容

  • $将正则表达式锚定在字符串的末尾

答案 1 :(得分:1)

^(?=.*p)(?=.*s)[a-z .]+$

试试这个。看看演示。

http://regex101.com/r/yR3mM3/33

var re = /^(?=.*p)(?=.*s)[a-z .]+$/gmi;
var str = 'Sup\nPast\nP.S. Away\nTest\nSet\nLapse\nSpace';
var m;

while ((m = re.exec(str)) != null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
// View your result using the m-variable.
// eg m[0] etc.
}

答案 2 :(得分:1)

使用正则表达式逻辑OR运算符|的另一种方法。

/^(?:.*p.*s.*|.*s.*p.*)$/mi

OR

/^.*(?:p.*s|s.*p).*$/mi

DEMO

答案 3 :(得分:0)

尝试以下正则表达式:

(((s{1}|S{1})(\w*|\W*)(p{1}|P{1}))|((p{1}|P{1})(\w*|\W*)(s{1}|S{1})))

http://regex101.com/r/mX3mG1/1