2015-03-26 4 views
0

Я пытаюсь создать регулярное выражение , который находит текст, который содержит: '?'Строка регулярного выражения не содержит?

  1. src
  2. .js

и не содержит знак вопроса в то же время.

Например, я хочу, чтобы мой регулярное выражение, чтобы соответствовать:

src="scripts/test.js" 

и не совпадают:

src="Servlet?Template=scripts/test.js" 

, потому что он содержит знак вопросительный знак.

Может ли кто-нибудь дать мне подходящее regex?

Большое спасибо

+1

Это одно из тех случаев, когда я, вероятно, предпочитаю читать 'if (str.indexOf ('src')! == -1 && str.indexOf ('. Js')! == -1 && str. indexOf ('?') === -1) {...} '. – Phylogenesis

+0

Я бы хотел использовать его, но я имею дело с полным текстом шаблона, поэтому он может содержать несколько вхождений 'src' с '.js', и я хочу изменить каждое вхождение src – user2484927

ответ

2

Вы можете использовать это регулярное выражение:

/\bsrc=(?!.*?\?).+?\.js\b/i 

(?!.*?\?) отрицательный предпросмотр, что означает провалить матч, когда есть ? следующие src= в строке ввода.

+0

спасибо! Я попробовал, но он прошел этот текст user2484927

+1

Конечно, так оно и было. Ваша спецификация просила его соответствовать этому. – Phylogenesis

+0

@ user2484927: Почему это не должно соответствовать ''? – anubhava

1

Вы, кажется, хотите parse/make changes to HTML with regex, но поскольку вы используете JavaScript, у вас уже есть полнофункциональный парсер DOM, доступный для вас.

Как о следующем:

var scripts = document.querySelectorAll('script[src]'); 

for (var i = 0; i < scripts.length; i++) { 
    var src = scripts[i].getAttribute('src'); 

    if (/\.js$/.test(src) && src.indexOf('?') === -1) { 
     alert(src); 
    } 
} 

Пример jsFiddle here.

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