2016-04-08 2 views
1

Что я хочу достичь?Регулярное выражение, чтобы найти непревзойденные слова в строке

-> Заменить слова из строки, которая не соответствует регулярному выражению, и заменить ее другим текстом.

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

Например:

var str = "New York"; 
alert(str.replace(/some_magical_reg_ex/, "Jersey")); 

Так что я хочу "Создать", и заменить слово "York" с чем-то еще. Результатом должно стать «Нью-Джерси»;

Что я пробовал?

https://regex101.com/r/fQ9fN8/3 В связи с этим я хочу выделить слово «ангелы», чтобы заменить его другим словом.

Обратите внимание на последнюю строку из примера. Вводимые данные - «los angeles», но ни один не подсвечивается/не сопоставляется.

Если вы считаете, что мне не хватает каких-либо материалов, пожалуйста, дайте мне знать, я уточню вопрос соответствующим образом.

EDIT: Позвольте мне подробнее объяснить.

У меня есть выпадающий список, который показывает местоположения. Поэтому, если пользователь вводит «Lo», он отображает следующие параметры. Луизиана, Лос-Анджелес и т. Д. (В зависимости от того, что начинается с «Ло»). Итак, в этом списке мне нужно применить теги <b></b> для оставшейся части текстов. т.е. когда пользователь вводит 'Lo', показать

  • 'Lo uisiana'
  • 'Lo s Angeles'

Таким образом, в случае str.replace(/some_magical_reg_ex/, <b>unmatched_text</b>)

ул =

'Lo' (ввод пользователя) и unmatched_text = 'uisiana' or 's Angeles'

+0

'/^(?! los). */Gim' соответствует любой строке, которая не начинается с' los' - чего вам нужно достичь? Пример в вашем вопросе можно решить только с помощью 'replace (/ \ bYork \ b /," Jersey ")' –

+0

Регулярные выражения предназначены для сопоставления шаблонов, вы не очень хорошо определили шаблон, который вы пытаетесь сопоставить. Вы просто хотите совместить слово «New» или «Los»? Это один префикс, который вы ищете или список? – excaza

+0

Что известно в вашем случае? «Новый» или «Йорк»? –

ответ

1

Вот регулярное выражение и не регулярное выражение способ сопоставления текста, за которой следует ввод данных пользователем:

var options = ["lousiana", 'los angeles', 'another'] 
 

 
var userInput = "lo" 
 

 
options.forEach(function(val){ 
 
    if(val.indexOf(userInput) == 0){ 
 
     console.log(val.replace(new RegExp('('+userInput+')(.*)', 'gi'), "$1<b>$2</b>")) 
 
    } 
 
}) 
 

 
options.forEach(function(val){ 
 
    var idx = val.indexOf(userInput) 
 
    if(idx == 0){ 
 
    console.log(userInput+'<b>'+val.substring(userInput.length)+'</b>') 
 
    } 
 
})

0

Если вы хотите, чтобы соответствовать слово, которое следует конкретное слово, использовать положительный: 'назад

(?<=New)\w+ 

Это будет соответствовать «Джерси» в «Нью-Джерси».

Рассматривая предоставленный вами пример, похоже, что вы хотите соответствовать остальной части строки, начиная с определенного слова. Я хотел бы использовать это:

^(?<=los).* 
0

Вы можете использовать:

/^Lo(.*)/ 

См regex demo

Заменить Lo<b>$1</b>.

Вот способ, чтобы использовать его в динамической схеме:

var knownWord = 'Lo'; 
 
var subst = knownWord + '<b>$1</b>'; 
 
var re = RegExp("^" + knownWord + "(.*)", "i"); 
 
var result = 'Los Angeles'.replace(re, subst); 
 
document.body.innerHTML = result;

+0

Если я наберу «Нью-Йорк», то будет найдено полное слово «Нью-Йорк». Принимая во внимание, что мне нужен только термин «Йорк». – sandeep

+0

Что это значит? Если вы знаете строку и набираете ее полностью, вы должны получить все совпадение записи. Просьба уточнить. Скрипка была бы очень полезна, чтобы понять, что вы имеете в виду. –

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