在Ruby中,您可以使用class HomeScreen extends Component {
static navigationOptions = {
title: ""
};
constructor(props) {
super(props);
this.state = {};
this.onStudentChange = this.onStudentChange.bind(this);
this.onGroupChange = this.onGroupChange.bind(this);
this.onParentChange = this.onParentChange.bind(this);
this.onSubmit = this.onSubmit.bind(this);
}
componentDidMount() {}
onParentChange(e) {
const { setYear: year } = this.props.credentials;
this.props.dispatch(setYear(e));
}
onGroupChange(e) {
console.log(this.props);
const { setYear } = this.props.credentials;
const { categories } = this.props.categories;
if (e !== null) {
this.props.dispatch(setGroup(e, categories, setYear));
}
}
onStudentChange(e) {
if (e !== "") {
this.props.dispatch(setStudent(e));
}
}
onSubmit(e) {
this.props.navigation.navigate("Month");
}
render() {
const {
setYear,
setGroup,
setStudent,
showStudent
} = this.props.credentials;
const categories = this.props.categories;
const isLoading = this.props.isLoading;
if (isLoading || !categories) {
return (
<View style={[styles.container, styles.horizontal]}>
<ActivityIndicator size="large" color="#fff" />
</View>
);
}
return (
<View style={styles.container}>
<Image
source={require("../img/logoGreen.png")}
style={{ width: 300, height: 200 }}
/>
<View style={{ backgroundColor: "white" }}>
<Picker
selectedValue={setYear}
label="Year"
onChange={this.onParentChange}
options={categories}
/>
{setYear ? (
<Picker
selectedValue={setGroup}
label="Group"
// invoked when picker above is changed.
onChange={this.onGroupChange}
options={
categories.find(category => {
return category.id == setYear;
}).options
}
/>
) : null}
{setGroup && showStudent ? (
<Picker
selectedValue={setStudent}
label="Student"
onChange={this.onStudentChange}
options={
categories
.find(category => {
return category.id == setYear;
})
.options.find(category => {
return category.id == setGroup;
}).options
}
/>
) : null}
{(setYear && setGroup && !showStudent) || setStudent ? (
<TouchableHighlight
style={styles.button}
onPress={this.onSubmit}
>
<Text style={styles.buttonText}> Submit</Text>
</TouchableHighlight>
) : null}
</View>
</View>
);
}
方法提取正则表达式的命名捕获组:
names
这种方法是否有Perl等价物?我可以提取这样的名字:
/(?<foo>.)(?<bar>.)(?<baz>.)/.names
#=> ["foo", "bar", "baz"]
但我不知道解决方案是多么强大/高效/优雅。
已编辑:我知道您可以在匹配后获取名称,但我需要在使用正则表达式之前提取名称。
答案 0 :(得分:4)
您可以在成功匹配后提取组的名称:
my $re = qr/(?<foo>.)(?<bar>.)(?<baz>.)/;
'abc' =~ $re;
say for keys %-;
答案 1 :(得分:2)
请参阅PPIx::Regexp::capture_names:
foreach my $name ( $re->capture_names() ) { print "Capture name '$name'\n"; }
此便捷方法返回正则表达式中的捕获名称。
我没有尝试过这个模块,所以我不确定提取你想要的信息是否100%可靠。
另请参阅@ ikegami对this question的回答,这导致我重新阅读perldoc re:
regnames($all)
返回上一个中定义的所有命名缓冲区的列表 成功的比赛。如果
$all
为真,则返回定义的所有名称, 如果不是,它只返回参与比赛的名称。
如此接近,但并不完全。我不知道在Ruby的.names
方式中对Perl中的正则表达式模式进行内省的内置方法。