我試圖從字符串中拉出一系列以特殊字符開頭的單詞。我的代碼是:JS正則表達式與特殊字符之前的空格匹配
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"]}
的問題是與原字符串中使用的字符。目前,Regex認爲[email protected]
不應該與@string
匹配。 我只想在特殊字符前有空格時匹配。
在使用正則表達式之前可能需要一個空格嗎?有沒有其他方法可以清理正則表達式,還是它的目的是正確的?或者我需要寫更多的JS來檢查值然後清理它們或什麼?
非常感謝
首先,改變正則表達式來'[#^ @>/* - !]' –
謝謝@ThomasAyoub,雖然這的確不解決這個問題。 – samiles