JS Regex在特殊字符之前与空格匹配

时间:2016-06-15 13:47:00

标签: javascript regex

我试图从一个字符串中的特殊字符开始提取一系列单词。我的代码是:

var specialChars = "!#^@>-/*";
var firstSpecialCharIndex = inputString.search(/[\\!\\#\\^\\@\\>\\\-\\/\\*]/);
var plainText = inputString.substring(0, firstSpecialCharIndex);
var result = {};
result["text"] = plainText;

for (i = firstSpecialCharIndex + 1; i < inputString.length;) {
    var modifiedString = inputString.substring(i);

    var currentChar = inputString.charAt(i - 1);
    if (result[currentChar] == null)
        result[currentChar] = [];
    var text = "";
    var specialCharIndex = modifiedString.search(/[\\!\\#\\^\\@\\>\\\-\\/\\*]/);
    if (specialCharIndex != -1) {
         text = modifiedString.substring(0, specialCharIndex);
        text = text.trim();
        result[currentChar].push(text);
        i += specialCharIndex + 1;
    } else {
        text = modifiedString.substring(0);
        text = text.trim();
        result[currentChar].push(text);
        i = inputString.length;
    }
}

现在这种工作,并正确地转动字符串:

String start ^a #b #c @d >e *f /g

成:

{"text":"String start ","^":["a"],"#":["b","c"],"@":["d"],">":["e"],"*":["f"],"/":["g"]}

问题在于使用原始字符串中的字符。目前,正则表达式认为string@string应该与@string匹配,而不应该document.getElementById("txt").innerHTML+ = arr[i]; 我想只在特殊字符前有空格时匹配。

在使用正则表达式之前是否可以要求空格?有没有其他方法可以清理正则表达式,或者它的目的是否正确?或者我是否需要编写更多JS来检查值然后清理它们还是什么?

非常感谢

2 个答案:

答案 0 :(得分:1)

您可以使用正则表达式:

/ ([!#^@>\/*-]\w+)/gm

使用此代码:

&#13;
&#13;
var result = {};


var re = / ([!#^@>\/*-]\w+)/gm; 
var str = 'lorem ipsum http://google.com -h ';
var m;

var firstSpecialCharIndex = str.search(/ [!#^@>\/*-]/);
result["text"] = str.substring(0, firstSpecialCharIndex);


while ((m = re.exec(str)) !== null) {
  if (m.index === re.lastIndex) {
    re.lastIndex++;
  }

  var index = m[1].substring(0,1);
  if(result[index] == null)
    result[index] = [];
  result[index].push(m[1].substring(1));
}


console.log(result);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以使用:

/\s[!#^@>\-/*]/

\s匹配所有空白字符[\r\n\t\f ]

或者如果您只想要一个普通的旧空间,不要包含换行符或标签

/ [!#^@>\-/*]/

此外,你不应该逃避已经逃脱的所有反斜杠,除了-

之外你也不需要逃避任何事情。