我在使用正则表达式时遇到了麻烦。
我有一组字符串。
@param* URL url './' an absolute URL giving the base location of the image
@param* Function callback callback(indexInArray, valueOfElement) The function that will be executed on every object.
@param Function callback Null The function that will be executed when the image is clicked
@param String name 'this is a test name' the name to use when displaying the image
@param String name "this is a test name" the name to use when displaying the image
我在新线上拆分它们给我个人字符串。
var match = val.split("\n");
这些字符串中的每一个都可以分为五个值:
示例:@param Function callback Null The function that will be executed when the image is clicked
@param = required;
Function = type;
callback = name;
Null = default;
The function that will be executed when the image is clicked = description.
我需要的是将这个字符串分成几部分,考虑到所有不同的字符串可能性,我很难创建可以在所有不同的默认和描述posibilites上分割的正则表达式。
我遇到一个特殊的问题,当它的字符串是双引号或单引号时,或者当它处于函数表示法时,试图将defaultValue输出。
这是我目前的工作代码;
$.each(match, function(index, value) {
var part = value.split(/\s/); //TODO need a regx to split this string correctly
var required = part[0];
var type = part[1];
var name = part[2];
var defaultValue = part[3];
var description = part[4];
});
我需要一个或多个步骤的正则表达式,可以将上面的所有五个例子分解为相同的五个变量。
编辑:我很抱歉没有参加正则表达,但我不知道从哪里开始。
答案 0 :(得分:2)
这不使用任何正则表达式,但我认为它更容易理解和维护。此外,我确信有更优雅的方式来执行if语句,但它是我的目前正在发生的事情。 http://jsfiddle.net/CcAus/
$.each(match, function(index, value) {
var part = value.split(' ');
var required = part.shift();
var type = part.shift();
var name = part.shift();
if(part[0][0]=='\''||part[0][0]=='"'){
part = part.join(' ');
var defaultValue = part.split(part[0][0]+' ',1)+part[0][0];
part=part.replace(defaultValue,'')
var description = part;
}
else{
var defaultValue = part.shift();
var description = part.join(' ');
}
});
答案 1 :(得分:1)
试试这个:
var regExp = /^(@.+?)\s(.+?)\s(.+?)\s(\'.+?\'|\".+?\"|\w.+?\)|\w+?)\s(.*)$/;
results = regExp.exec(value);
var required = results[0];
var type = results[1];
var name = results[2];
var defaultValue = results[3];
var description = results[4];
我使用http://regexhero.net/tester/快速测试,但除此之外我没有测试过。