gpt4 book ai didi

javascript - 将正则表达式匹配到下一个特殊字符,同时允许空格

转载 作者:行者123 更新时间:2023-11-30 00:06:44 25 4
gpt4 key购买 nike

我正在使用 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[!#^@>\/*-]|$)

Regex Demo

第 1 组包含符号,第 2 组包含文本,您可以根据需要 trim 结果。

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>");

关于javascript - 将正则表达式匹配到下一个特殊字符,同时允许空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38218490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com