我试图从一个字符串中的特殊字符开始提取一系列单词。我的代码是:
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来检查值然后清理它们还是什么?
非常感谢
答案 0 :(得分:1)
您可以使用正则表达式:
/ ([!#^@>\/*-]\w+)/gm
使用此代码:
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;
答案 1 :(得分:0)
您可以使用:
/\s[!#^@>\-/*]/
\s
匹配所有空白字符[\r\n\t\f ]
或者如果您只想要一个普通的旧空间,不要包含换行符或标签
/ [!#^@>\-/*]/
此外,你不应该逃避已经逃脱的所有反斜杠,除了-