Regex c # не дает тот же результат с https://regex101.com/ [duplicate]

Используя реакцию 15.1.0, реактивный маршрутизатор 2.5.0 и бутстрап 3.3 (это менее важно), я разработал это решение для активирования ссылок:

npm install --save classnames

npm install --save lodash

Компонент:

import React from 'react';
import { Link, IndexLink } from 'react-router';
import _ from 'lodash';
import classnames from 'classnames';

class NavItem extends React.Component {
  constructor(props) {
    super(props);

    // The default state
    this.state = {
      isActive: false,
      unregisterRouteListener: false
    };

    // Binding for functions
    this.locationHasChanged = this.locationHasChanged.bind(this);
  }

  componentDidMount() {
    // Check if component is active on mount and add listener on route change
    this.setState({
      isActive: this.context.router.isActive(this.props.to, true),
      unregisterRouteListener: this.context.router.listen(this.locationHasChanged)
    });
  }

  componentWillUnmount() {
    if (this.state.unregisterRouteListener) {
      // Remove the listener
      this.state.unregisterRouteListener();
    }

    // Reset the state
    this.setState({
      isActive: false,
      unregisterRouteListener: false
    });
  }

  // Update the state of the component, based on the router path
  locationHasChanged() {
    this.setState({
      isActive: this.context.router.isActive(this.props.to, true)
    });
  }

  render () {
    let { index } = this.props;
    let LinkComponent = index ? Link : IndexLink;
    let newProps = _.omit(this.props, 'router');

    return (
      <li className={classnames('', this.state.isActive ? 'active' : '' )}>
        <LinkComponent {...newProps}>
          {this.props.children}
        </LinkComponent>
      </li>
    );
  }
}

NavItem.contextTypes = {
  router: React.PropTypes.object
};

export default NavItem;

Использование:

<NavItem to="/list">List</NavItem>

Я начинаю с React, поэтому решение, улучшения и могут содержать ошибки подхода. Однако он также может содержать полезную информацию или отправную точку для заинтересованных лиц.

Любая обратная связь или предложения более чем приветствуются. Благодаря! :)

13
задан Mike Mengell 3 February 2011 в 23:24
поделиться

3 ответа

Используйте положительный взгляд вперед и посмотрите за утверждением в соответствии с угловыми скобками, используйте .*? для соответствия кратчайшей последовательности символов между этими скобками. Найти все значения, итерации MatchCollection, возвращенных методом Matches().

Regex regex = new Regex("(?<=<<).*?(?=>>)");

foreach (Match match in regex.Matches(
    "this is a test for <<bob>> who like <<books>>"))
{
    Console.WriteLine(match.Value);
}
32
ответ дан Peter van der Heijden 18 August 2018 в 05:39
поделиться
  • 1
    каламбур не предназначен, но это именно то, что мне нужно. Благодарим вас за очень быстрые ответы. – Mike Mengell 3 February 2011 в 23:40

Что-то вроде этого:

(<<(?<element>[^>]*)>>)*

Эта программа может быть полезна:

http://sourceforge.net/projects/regulator/

0
ответ дан Gabriel Magana 18 August 2018 в 05:39
поделиться

Вы можете попробовать один из них:

(?<=<<)[^>]+(?=>>)
(?<=<<)\w+(?=>>)

Однако вам придется перебирать возвращенный MatchCollection.

1
ответ дан MarioVW 18 August 2018 в 05:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: