我正在使用Javascript使用正则表达式提取字符串的一部分。
我有一个像这样的字符串:
lorem ipsum !bang #hash #hash2 ^caret word @at sym
我正在尝试以各种字符开头的单词-有时它们中可以有空格,每种类型可以有多个。所以我想将此字符串转换为一组值,例如:
text: "lorem ipsum"
!: "bang"
#: ["hash", "hash2"]
^: "caret word"
@: "at sym"
我当前的正则表达式是/ ([!#^@>\/*-]\w+)/gm
。这种类型的作品,但它不匹配的空间-所以从样品上方仅能生产caret
的^
,而不是整个caret word
。
我要做的代码是:
var result = {};
var re = / ([!#^@>\/*-]\w+)/gm;
var m;
var firstSpecialCharIndex = inputString.search(/ [!#^@>\/*-]/);
result["text"] = inputString.substring(0, firstSpecialCharIndex);
while ((m = re.exec(inputString)) !== 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));
}
有谁知道我如何匹配下一个特殊字符,包括多个单词之间的空格(但不匹配下一个特殊字符后的空格)?非常感谢
我text
为简单起见删除了一部分。您可以使用先行
([!#^@>\/*-])(.*?)(?=\s[!#^@>\/*-]|$)
第1组包含符号,第2组包含文本,您可以根据需要调整结果。
JS演示
var inputString = "lorem ipsum !bang #hash #hash2 ^caret word @at sym";
var result = {};
var re = /([!#^@>\/*-])(.*?)(?=\s[!#^@>\/*-]|$)/gm;
var m;
var firstSpecialCharIndex = inputString.search(/ [!#^@>\/*-]/);
result["text"] = inputString.substring(0, firstSpecialCharIndex);
while ((m = re.exec(inputString)) !== null) {
var index = m[1];
if(result[index] == null) {
result[index] = [];
}
result[index].push(m[2].trim());
}
document.writeln("<pre>" + JSON.stringify(result) + "</pre>");
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句