Javascript 正则表达式匹配由空格分隔符分隔的单词
Javascript regex to match words separated by a spaced delimiter
我想验证由一些分隔符分隔的单词输入。
本例中的分隔符是“|”符号,
前后用space隔开
Hello | There | Yes -----> Match
Hello -----> Match
hello|There -----> No Match
到目前为止,我只得到了带有以下反句的第一个词:
^[a-zA-Z]+
如何用 space 和定界符分隔单词或数字?
PS 仍在学习教程。任何帮助将不胜感激
为了进一步说明,我正在为上述内容寻找正则表达式,以便 dojo dijit 小部件正确验证输入。
dojo.declare("some.class", dijit.form.ValidationTextBox, {
regExp: ""
});
dojo.addOnLoad(function() {
var formString = new some.class({
}, "StringName");
}
<form id="myForm" name="myForm">
String: <input id="StringName" name="name" type="text">
</form>
如果行是上述格式,那么您似乎在尝试匹配整行。
^[A-Za-z\d]+(?:\s\|\s[A-Za-z\d]+)+$
或
如果您还想匹配单个单词,请使用此选项。
^[A-Za-z\d]+(?:\s\|\s[A-Za-z\d]+)*$
var s = "Hello | There | Yes";
var s1 = "hello|There";
var s2 = "456 | 654 | 645 | 465";
alert(/^[A-Za-z\d]+(?:\s\|\s[A-Za-z\d]+)+$/.test(s))
alert(/^[A-Za-z\d]+(?:\s\|\s[A-Za-z\d]+)+$/.test(s1))
alert(/^[A-Za-z\d]+(?:\s\|\s[A-Za-z\d]+)+$/.test(s2))
如果你想使用正则表达式,你可以使用像这样的简单正则表达式:
^\w+(?:\s\|\s\w+)*$ <--- this allows a unique word
or
^\w+(?:\s\|\s\w+)+$ <--- this allows two words at least
Javascript代码:
var re = /^\w+(?:\s\|\s\w+)*$/gm;
var str = 'Hello | There | Yes\nhello|There\n456 | 654 | 645 | 465';
var m;
while ((m = re.exec(str)) !== null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
// View your result using the m-variable.
// eg m[0] etc.
}
如果您知道它将始终是一个 space 后跟一个竖线字符再后跟一个 space,那么在没有正则表达式的情况下使用 split()
可能更容易。
var myArray = myString.split(' | ');
如果你绝对必须使用正则表达式,因为(例如)你不知道什么样的白色 space 字符或会有多少,你仍然可以使用 split()
但只是将正则表达式传递给它:
var myRegExp = /\s+\|\s+/;
var myArray = myString.split(myRegExp);
我想验证由一些分隔符分隔的单词输入。 本例中的分隔符是“|”符号,
前后用space隔开Hello | There | Yes -----> Match
Hello -----> Match
hello|There -----> No Match
到目前为止,我只得到了带有以下反句的第一个词:
^[a-zA-Z]+
如何用 space 和定界符分隔单词或数字? PS 仍在学习教程。任何帮助将不胜感激
为了进一步说明,我正在为上述内容寻找正则表达式,以便 dojo dijit 小部件正确验证输入。
dojo.declare("some.class", dijit.form.ValidationTextBox, {
regExp: ""
});
dojo.addOnLoad(function() {
var formString = new some.class({
}, "StringName");
}
<form id="myForm" name="myForm">
String: <input id="StringName" name="name" type="text">
</form>
如果行是上述格式,那么您似乎在尝试匹配整行。
^[A-Za-z\d]+(?:\s\|\s[A-Za-z\d]+)+$
或
如果您还想匹配单个单词,请使用此选项。
^[A-Za-z\d]+(?:\s\|\s[A-Za-z\d]+)*$
var s = "Hello | There | Yes";
var s1 = "hello|There";
var s2 = "456 | 654 | 645 | 465";
alert(/^[A-Za-z\d]+(?:\s\|\s[A-Za-z\d]+)+$/.test(s))
alert(/^[A-Za-z\d]+(?:\s\|\s[A-Za-z\d]+)+$/.test(s1))
alert(/^[A-Za-z\d]+(?:\s\|\s[A-Za-z\d]+)+$/.test(s2))
如果你想使用正则表达式,你可以使用像这样的简单正则表达式:
^\w+(?:\s\|\s\w+)*$ <--- this allows a unique word
or
^\w+(?:\s\|\s\w+)+$ <--- this allows two words at least
Javascript代码:
var re = /^\w+(?:\s\|\s\w+)*$/gm;
var str = 'Hello | There | Yes\nhello|There\n456 | 654 | 645 | 465';
var m;
while ((m = re.exec(str)) !== null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
// View your result using the m-variable.
// eg m[0] etc.
}
如果您知道它将始终是一个 space 后跟一个竖线字符再后跟一个 space,那么在没有正则表达式的情况下使用 split()
可能更容易。
var myArray = myString.split(' | ');
如果你绝对必须使用正则表达式,因为(例如)你不知道什么样的白色 space 字符或会有多少,你仍然可以使用 split()
但只是将正则表达式传递给它:
var myRegExp = /\s+\|\s+/;
var myArray = myString.split(myRegExp);