Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.07.2018, 20:06
Аспирант
Отправить личное сообщение для VyacheslavBozere Посмотреть профиль Найти все сообщения от VyacheslavBozere
 
Регистрация: 18.03.2018
Сообщений: 31

Js регулярные выражения
Всех приветстую, подскажите пож-та в чем суть ошибки. Делаю combobox в react выполняю поиск регулярными выражениями, в файле json. Данные беру из onChange тэга input. Поиск выполняется успешно, но если будет пробел или два пробела, то нет. Если удаляю текст в input окне то выпадает весь список. В консоли e.target.value после удаления строки в input, через который беру значения для регулярного выражения вот такое : Ввожу "по" в input ( /по/gi/) а удаляю "по"
((? :)/gi)
.

<!DOCTYPE HTML>
<html>

<head>
  <meta charset="utf-8">
  <script crossorigin src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
    <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.25.0/babel.min.js"></script>
</head>

<body>

  <div  id="root">
    
  </div>

  
  
  <script type="text/babel">

    let arr = [".Дом.Земля.Вода.Ведро.Столб"];

    //Ищем данные в JSON      
     function getItems(items, value) {
      let regExp = new RegExp(value, "gi");
      let JSONparse = /\.+/g;//Деление каждого JSON
      let match;
      let arrayOfMatches = [];
      let getCities = []; 
      //JSON успешно спарсился
      while (match = JSONparse.exec(items)) {
           arrayOfMatches.push(match[0]);           
      }
        for(let el of arrayOfMatches){
          if (regExp.test(el)){
            getCities.push(el);          
            } 
          }
      
      
      return getCities;
      }

       function divSet(item) {     
          let list = item.map(a => 
            <li>{a}</li>
            );
          return <ul>{list}</ul>;
          }

      class Combobox extends React.Component{
      constructor(props) {
      super(props);
      this.state = {popular: null }; // ничего
      this.openHead = this.openHead.bind(this);
      this.closeHead = this.closeHead.bind(this); 
      this.handleChange = this.handleChange.bind(this);
    }

     openHead() {
          let popularItems = divSet(arr);
          this.setState({value: this.state.value,
           popular: popularItems});
      } 

     closeHead() {
        this.setState({value: this.state.value,
         popular: null});
      } 
    *!*
     handleChange(e) { // change input value
        let regExp = new RegExp(e.target.value, "ig");
        console.log(regExp);
        console.log(e.target.value);        
        let find = getItems(arr, regExp);
        let findCities = divSet(find);
        this.setState({popular: findCities});
      }
    */!*
    render() {
        return (
          <div>
              <input type="text" value={this.state.value} onClick={this.openHead} onBlur={this.closeHead} onChange={this.handleChange}  />
          <div>{this.state.popular}</div>
          </div>
       );
    }

  }


 ReactDOM.render(
    <Combobox  />,
    document.getElementById('root')
    )  
      
        

    
  
  </script>

</body>

</html>

Последний раз редактировалось VyacheslavBozere, 14.07.2018 в 21:30.
Ответить с цитированием
  #2 (permalink)  
Старый 14.07.2018, 20:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

Сообщение от VyacheslavBozere
str
что это?
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #3 (permalink)  
Старый 14.07.2018, 21:27
Аспирант
Отправить личное сообщение для VyacheslavBozere Посмотреть профиль Найти все сообщения от VyacheslavBozere
 
Регистрация: 18.03.2018
Сообщений: 31

Исправил, посмотрите пож-та.
Ответить с цитированием
  #4 (permalink)  
Старый 14.07.2018, 22:10
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

react find array
VyacheslavBozere,
ввести t
<html>
<head>
        <title></title>
        <style type="text/css">
        ul{
            list-style: none;
             margin: 0;
             padding: 0;
        }
        ul.span {
            color: red;
        }

        </style>
</head>
<body>
        <div id="root"></div>
        <script crossorigin src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
        <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.25.0/babel.min.js"></script>
        <script type="text/babel">
let cities = "Toronto,Edmonton,Charlottetown".split(",");
let getItems = (cities, regExp) => cities.filter(e => regExp.test(e));
let divSet = (cities) => cities.map(city => <li>{city}</li>);
class Combobox extends React.Component{
 constructor(props) {
 super(props);
 this.state = {popular: divSet(["find city"]) };
this.handleChange = this.handleChange.bind(this);
 }


handleChange(e) {
 let str = e.target.value.trim();
 let find =  ["no find"];
 if(str) {
    let regExp = new RegExp(str, "ig");
    find = getItems(cities, regExp) || find;
 }
 let findCities = divSet(find)
 this.setState({popular: findCities});
 }

 render() {

 return (
 <div>
 <input type="text" onChange={this.handleChange} />
 <ul>{this.state.popular}</ul>
 </div>
 );
 }
 }
 ReactDOM.render(<Combobox />, document.getElementById('root'))

</script>

</body>
</html>
Ответить с цитированием
  #5 (permalink)  
Старый 14.07.2018, 23:11
Аспирант
Отправить личное сообщение для VyacheslavBozere Посмотреть профиль Найти все сообщения от VyacheslavBozere
 
Регистрация: 18.03.2018
Сообщений: 31

Понял, спасибо большое!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярные выражения alex2012 Общие вопросы Javascript 5 23.02.2013 19:49
Регулярные выражения для javascript qwert_ukg Общие вопросы Javascript 3 20.04.2012 13:45
Регулярные выражения vivalaakam Общие вопросы Javascript 6 08.02.2012 09:41
JS и регулярные выражения. LRCenter Общие вопросы Javascript 5 03.05.2011 16:53
нежадные регулярные выражения KOLANICH Общие вопросы Javascript 2 12.12.2010 01:08