2016-06-08 3 views
0

Существует строка:Как выполнить требование по регулярному выражению

python php ruby javascript jsonp perhapsphpisoutdated 

Я хочу вернуть слова, которые содержат p, но не содержат ph Такие, как:

[ 'python', 'javascript', 'jsonp' ] 

Как написать Это?

var result = web_development.match(/\b((?!ph)\w)+\b/g); 

До сих пор я не знаю, как написать больше, пожалуйста, помогите мне!

+0

Я только хочу, чтобы использовать один регулярное выражение , и получить результат; –

ответ

0

Это должно сделать трюк:

\b([a-oq-z]+|[a-oq-z]*(p[a-gi-z][a-oq-z]*)+)p?\b 

Объяснение: В левой части перед OR соответствует работы без «р». Правая часть сначала сопоставляет необязательный префикс без «p», затем любое число «p», затем что-то, кроме «h», а затем ничего, кроме «p»; наконец, необязательный «p» без каких-либо последствий может произойти.

+0

Вы проверили его где-нибудь? Я получаю странные результаты на regexpal.com при использовании данной строки, и это регулярное выражение –

+0

Исправлено. Две вещи были неправильными: маркеры границы Word отсутствовали, и случай no-p все равно должен принять необязательный «p» в конце (это тот случай, когда «p» находится в конце, но НЕ посередине, поскольку в «jsonp») –

0

В Python, это может быть сделано как этот

import re 
sample_string = "python php ruby javascript jsonp perhapsphpisoutdated" 
regex=r"^((?!ph).)*$" 
print [word for word in sample_string.split() if re.search(regex,word)] 
+0

Я хочу использовать регулярное выражение и возвращать результат напрямую .... –

0

Выберите один из следующих подходов:

  • первый подход с использованием String.replace (заменить слова, которые имеют ph последовательность с пустой строкой "") и String.match функция (в соответствии с остальными словами, если они содержат p символов):

    var web_development = "python php ruby javascript jsonp perhapsphpisoutdated", 
        result = web_development 
            .replace(/\b[a-z]+?ph([a-z]+)?\b|\bph[a-z]+?\b/g, "") 
            .match(/\b([a-z]+?)?[p]([a-z]+?)?\b/g); 
    
    console.log(result); // ["python", "javascript", "jsonp"] 
    
  • второй подход с использованием String.split и Array.filter функции:

    result = web_development.split(" ").filter(function(word){ 
        return word.indexOf("p") !== -1 && word.indexOf("ph") === -1; 
    }); 
    
    console.log(result); // ["python", "javascript", "jsonp"] 
    
0

var reg = /\b(?=\w*p)(?!\w*ph)\w+\b/g; console.log(web_development.match(reg)); я, наконец, получить решение ... это трудно работать

Смежные вопросы