可能是一個簡單的問題,但我創建正則表達式的知識有點含糊。RegExp匹配除兩個保留字符串之外的任何字符串嗎?
我想匹配任何字符串,後跟一個逗號和除非它是「拜爾雜亂」或空間「液體加熱器」
這裏是我迄今爲止
var re_comma = new RegExp("\w+[^Bair Hugger|Fluid Warmer]" + ", ", "i");
有任何想法嗎?
可能是一個簡單的問題,但我創建正則表達式的知識有點含糊。RegExp匹配除兩個保留字符串之外的任何字符串嗎?
我想匹配任何字符串,後跟一個逗號和除非它是「拜爾雜亂」或空間「液體加熱器」
這裏是我迄今爲止
var re_comma = new RegExp("\w+[^Bair Hugger|Fluid Warmer]" + ", ", "i");
有任何想法嗎?
新的答案
關於你提到的例子中,我會說這是真的容易了它分割字符串和迭代:
function filter(str, delim, test) {
var parts = str.split(delim),
result = [];
for(var i = 0, len = parts.length; i < len; i++) {
if(test(parts[i])) result.push(parts[i]);
}
return result.join(delim);
}
str = filter(str, ', ', function(s) {
s = s.toLowerCase();
return s === 'bair hugger' || s === 'fluid warmer';
});
否則,你的表情變得像這樣:
new RegExp("(^|,)(?!(?:Bair Hugger|Fluid Warmer)(?:$|,)).+?(, |$)", "i");
並且您必須使用回調進行替換以決定是否刪除前面的,
或尾隨,
與否:
str = str.replace(re_comma, function(str, pre, tail) {
return pre && tail ? tail : '';// middle of the string, leave one
});
該代碼的意圖是不太清楚。也許有一個更簡單的表達式,但我認爲過濾數組仍然更清潔。
老答案:(不手頭解決問題,但對於正則表達式提供的信息)。
[]
表示字符類,只會匹配一個的性格,你所提供的那些的。 [^Bair Hugger|Fluid Warmer]
與[^Bair Huge|FldWm]
相同。
你可以使用負前瞻:
new RegExp("^(?!(Bair Hugger|Fluid Warmer),).+?, $", "i");
請注意,你必須使用\\
字符串中產生一個\
。否則,"\w"
將變成w
,並且不再是特殊字符序列。您還必須錨定表達式。
更新:正如你所說,你要匹配的逗號之前的任何字符串,我決定用.
而不是\w
,匹配任何字符。
你的意思是'(?!'而不是'(?!='? – Howard 2011-12-20 10:04:37
@霍華德:謝謝! – 2011-12-20 10:05:26
這也排除了那些只是從一個「禁止的詞」開始(比如'Bair Hugger Refill,')。 – 2011-12-20 10:11:57
我愛正則表達式和Felix Kling的答案是正確的:)
然而,對於這樣的簡單匹配我通常會使用類似下面
function contains(str, text) {
return str.indexOf(text) >= 0;
}
if(contains(myString, 'random')) {
//myString contains "random"
}
謝謝,對未來有用,但我不能用它來實現我的目標。 – 2011-12-20 10:22:18
解決方案:
reg =/(?:Bair Hugger|Fluid Warmer),| (.*)/
str='Bair Hugger, lalala'
reg.exec(str)
>> ["Bair Hugger, lalala", " lalala"]
newStr = reg.exec(str)[1]
你會如何使用它從''毯子,液體加溫器,Bair Hugger''去掉'毯子'? – 2011-12-20 11:00:43
你的意思是','後面的句子或整個字符串的結尾? – Termi 2011-12-20 10:02:46
什麼是Bair Hugger? – 2011-12-20 10:10:02
@Termi字符串和它後面的逗號和空格。但之後什麼也沒有。希望更清楚 – 2011-12-20 10:10:13